請考慮下面的代碼。創建基類對象時的運行時多態性
class Base{
Base() {
print();
}
void print() {
System.out.println("Base");
}
}
class Child extends Base{
int i = 4;
public static void main(String[] args){
Base base = new Child();
base.print();
}
void print() {
System.out.println(i);
}
}
該程序將打印0,4。
我的理解是,要執行的方法將根據實際對象的類別進行選擇,因此在這種情況下爲Child
。所以當Base
的構造函數被稱爲打印方法Child
被調用,所以這將打印0,4。
請告訴我是否理解正確? 如果是,我還有一個問題,而基類構造函數運行時,JVM如何調用Child
的方法,因爲Child
的對象沒有創建?
好點,創建vs初始化。之前我曾經對此感到困惑。 –
@dasblinkenlight感謝您解決這個問題,並且鏈接很有用。 –