我遇到了問題。在繼承時,基構造函數調用虛方法,爲什麼類是Dervied並調用Dervied方法?
public class Dervied extends Base {
private String name = "dervied";
public Dervied() {
System.out.println(this.getClass().toString());
this.tellName();
}
public void tellName() {
System.out.println("Dervied tell name: " + name);
}
public static void main(String[] args) {
Base base = new Dervied();
}
}
class Base {
private String name = "base";
public Base() {
System.out.println(this.getClass().toString());
this.tellName();
}
public void tellName() {
System.out.println("Base tell name: " + name);
}
}
結果是:
class Dervied
Dervied tell name: null
class Dervied
Dervied tell name: dervied
但是,爲什麼下面的代碼不會按預期運行?環境是jdk1.8.0_60和Windows 10.當new Dervied()
遇到Dervied()
方法,並調用基礎構造函數Base()
。但是爲什麼Base()
的印刷類是Dervied
?而this.tellName()
將Dervied
類中的方法稱爲多態?
字段不是多態的。 – Savior