在以下示例中被覆蓋的方法,包括:調用從一個構造
class Base {
int x=10;
Base() {
show();
}
void show() {
System.out.print ("Base Show " +x + " ");
}
}
class Child extends Base {
int x=20;
Child() {
show();
}
void show() {
System.out.print("Child Show " + x +" ") ;
}
public static void main(String s[ ]) {
Base obj = new Child();
}
}
- 爲什麼是如下所示
Child Show 0 Child Show 20
- 我想構造可以將輸出只有一次訪問實例成員的超級構造函數已完成。
我認爲這裏發生的事情是超級構造函數調用孩子的show()方法,因爲這個方法在Child中被覆蓋。因爲它已被覆蓋,但爲什麼是x 0的值,爲什麼它能夠在超級構造函數完成之前訪問此方法?
正在建設的對象的過程中啓用了虛擬處理機制?我懷疑它不是。 – Mahesh
在C++中,這會導致崩潰。 –
有效的Java是一個很好的Java資源,它非常詳細地介紹了這一點。從項目17:「***構造函數不得直接或間接地調用可重寫方法**(...)如果重寫方法依賴於子類構造函數執行的任何初始化,則該方法不會按預期行爲。 *「如果你手頭有書,我強烈建議閱讀這個項目。 –