我在一本書中讀到實例成員只有在超級構造函數運行後纔可以訪問。訪問構造函數中的實例成員
我偶然發現了下面的代碼:
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