amo*_*214 3 java constructor instance-variables super
我在一本书中读到,实例成员只有在超级构造函数运行后才能访问.
我偶然发现了以下代码:
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 + " ");
}
}
Run Code Online (Sandbox Code Playgroud)
它打印:
0 100
我的问题是:
如果只有在超级构造函数运行后才能访问实例成员,那么为什么在执行类Parent的printIt()方法时(由于多态性实际上是Child的printIt()),它能够访问未初始化的尽管Parent的构造函数尚未执行,但是Child的实例变量i?
我错过了什么?
我在一本书中读到,实例成员只有在超级构造函数运行后才能访问.
你的书是错的(如果那是它真正的说法).一旦施工开始,它们随时都可以使用.但是,在超级构造函数运行之后才会初始化它们.所以你打印的是默认值:null,zero或false.