public class Test6 {
public static void main(String[] args) {
new Derived();
}
}
class Base {
private int i = 2;
public Base() {
this.display();
}
public void display() {
System.out.println(i);
}
}
class Derived extends Base {
private int i = 22;
Derived() {
i = 222;
}
public void display() {
System.out.println(i);
}
}
控制台输出的是:0。不懂为什么,不是应该输出2吗
------解决思路----------------------
过程如下:
1.子类初始化,先创建父类对象
public Base() {
this.display();重点这里了,由于子类覆写了display()函数,这里会跳到子类的display,
}
子类与父类都是这样实现的display函数
public void display() {
System.out.println(i);
}
}
父类初始化时display跳到了子类,而此时子类还未进行成员变量的初始化,i=0,子类的display()输出0.
2.父类初始化后子类初始化化,包括成员变量,i的改写为22.
------解决思路----------------------
那请问重点那行...是因为多态吗?如果是多态..也没有父类引用指向子类对象啊,如果不是..this在debug模式下显示是 Derived为什么?