我在一本书中读到,只有在超级构造函数运行后才能访问实例成员。
我偶然发现了以下代码:
class Parent {
Parent() {
printIt();
}
void printIt() {
System.out.println("I'm in a overridden method. Great.");
}
}
class Child extends Parent {
int i = 100;
public static void main(String[] args) {
Parent p = new Child();
p.printIt();
}
void printIt() {
System.out.print(i + " ");
}
}
它打印:
0 100
我的问题是:
如果实例成员只有在超级构造函数运行后才能访问,那为什么在执行Parent类的printIt()方法时(实际上是Child的printIt(),由于多态性),它能够访问未初始化的Child 的实例变量 i 即使 Parent 的构造函数尚未完成执行?
我错过了什么?