我在一本书中读到实例成员只有在超级构造函数运行后才可以访问。访问构造函数中的实例成员
我偶然发现了下面的代码:
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 + " ");
}
}
和它打印:
我的问题是:
如果实例成员都可以访问后,才超级构造函数运行,那么为什么在执行父类的printIt()方法时(它实际上是Child的printIt()到多态性),它能够访问Child的未初始化的实例变量i,即使Parent的构造函数尚未完成执行?
我错过了什么?
“他们在任何时候都可以访问一旦施工已经开始,但它们不会在超级构造函数运行之后才初始化。“---伟大的观点。 +1 –
很好说@EJP。事情现在变得更加清晰。 – amor214