public class Base {
int var =0;
Base(){
System.out.println("Inside Base constructor .....");
setVar();
}
public void setVar(){
System.out.println("Inside base setVar method.....");
var+=10;
}
public int getVar(){
return var;
}
}
派生類:方法調用使用參考變量
public class Derived extends Base {
Derived(){
System.out.println("Inside Derived constructor .....");
setVar();
}
public void setVar(){
System.out.println("Inside Derived setVar method.....");
var+=20;
}
public static void main(String[] args){
Base b = new Derived();
System.out.println(b.getVar());
}
}
輸出.....
Inside Base constructor .....
Inside Derived setVar method.....
Inside Derived constructor .....
Inside Derived setVar method.....
40
問題---->爲什麼當控制進到基類的構造,SETVAR ()方法調用派生類而不是基類setVar()方法。 我期望輸出爲30,但是當在調試模式下運行此程序時發現流量並將輸出設爲40.任何人都可以請解釋這背後的邏輯。 謝謝
在你的答案我有兩個疑惑:1>這意味着如果在主要方法,即使我改變基地b =新派生()派生d =新派生()同樣的事情會發生? 2>如何使用派生類對象調用Base類的setVar()方法? –
1.是的,只有運行時類型很重要。 2.從調用類方法的代碼中,重寫的方法是不可訪問的。從代碼內部到類,你可以調用'super.setVar();'。 – rgettman
「從調用類方法的代碼中,重寫的方法是不可訪問的。」你能否詳細說明你的陳述? –