【发布时间】:2012-08-21 14:53:02
【问题描述】:
我在一本书中读到实例成员只有在超级构造函数运行后才能访问。
我偶然发现了以下代码:
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()),它能够即使Parent的构造函数还没有执行完,也访问Child未初始化的实例变量i?
我错过了什么?
【问题讨论】:
标签: java constructor instance-variables super