我在一本书上看到,实例成员只有在 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 + " ");
}
}
并打印:
0 100
我的问题是:
如果实例成员只有在 super 构造函数运行后才能访问,那么为什么在执行类 Parent 的 printIt() 方法时(由于多态性,实际上是 Child 的 printIt()),它能够Parent的构造函数还没有执行完就访问Child未初始化的实例变量i?
我错过了什么?
最佳答案
I read in a book that instance members are accessible only after the super constructor runs.
你的书错了(如果它真的是这么说的话)。一旦施工开始,它们随时都可以访问。但是,在 super 构造函数运行之前,它们不会被初始化。所以您打印的是默认值:null、零或 false。
关于java - 在构造函数中访问实例成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12136544/