public class Dervied extends Base {
private String name = "dervied";
public Dervied() {
tellName();
printName();
}
public void tellName() {
System.out.println("Dervied tell name: " + name);
}
public void printName() {
System.out.println("Dervied print name: " + name);
}
public static void main(String[] args){
new Dervied();
}
}
class Base {
private String name = "base";
public Base() {
tellName();
printName();
}
public void tellName() {
System.out.println("Base tell name: " + name);
}
public void printName() {
System.out.println("Base print name: " + name);
}
}
我原本以爲答案是這樣的:
Base tell name: null
Base print name: null
Dervied tell name: dervied
Dervied print name: dervied
然而運行後結果卻是:
Dervied tell name: null
Dervied print name: null
Dervied tell name: dervied
Dervied print name: dervied
也就是說,在執行父類構造方法的時候,已經執行子類重寫後的方法了。
根據我的理解,應該是運行時綁定在作祟,當子類新建對象時,父類調用被子類重寫過的方法,那麼編譯器就會判定,應該將該方法編譯爲子類重寫的方法。
我想了好久,除了這個解釋應該沒別的原因,如果我錯了,請私信我。
啊,本來每天11.30準時睡覺的,爲了解決這個問題拖了一小時還沒洗澡.....不過蠻開心的,碎覺。