在下面这个程序中,
class Person{
private void print(){
System.out.println("Person>void print");
}
public void fun(){
this.print();
}
};
class Student extends Person{
void print(){
System.out.println(" Student >void print");
}
};
public class Demo04{
new Student().fun();
}
输出结果是什么?为什么?
输出的是person里的,因为虽然继承了Person类,但并没有重写fun方法,fun还是在person类定义的那个fun,所以fun里的this指的是person对象。
输出的是 Person>void print
Student()的fun()方法是在 Person()里继承的,fun()里的的print()方法里的this是person;
所以输出person
因为print是私有的。在java语言中规定,公有方法才可以重写。
punchueng 说的是错误的。
class Person{
public void print(){
System.out.println("Person>void print");
}
public void fun(){
this.print();
}
};
class Student extends Person{
public void print(){
System.out.println(" Student >void print");
}
};
public class Demo04{
new Student().fun();
}
这样就会输出 student
你可以在fun函数里打印this,发现this指的是student
大家可能没理解我的意思,Person类中的print方法是私有的, 类的私有方法可以被子类继承,而子类不能覆写父类的私有方法,那么Student类中就有两个print方法,一个子类定义的,另一个是从父类继承过来的。那此时fun方法到底会调用哪一个print方法呢?可是第二个问题就产生了,这个两个方法同时出现在子类中,却不符合重载的要求,按理说程序会出错啊,可实际上程序没有问题,这又是为什么呢?