public class Test {
public static void main(String[] args){
B b=new B();
A a1=new A();
A a2=b;
a1=b;
a1.printDescription(); //which prints I'm B
a2.printDescription(); //which also prints I'm B
}
}
class A{
public void printDescription(){
System.out.println("I'm A");
}
}
class B extends A{
public void printDescription(){
System.out.println("I'm B");
}
}
搜索後,我找到一個解釋Confusion in Java polymorphism,其中說:「即使X爲A型明確宣佈,它被實例化作爲B類的一個對象,所以我將運行版本在B類中定義的doIt()方法。「但是在我使用類A構造函數實例化對象之後,它仍然打印出」我是B「,那麼任何人都可以爲我解釋這一點嗎?對象類型混淆
賦值'A1 = B'破陣您自己創建的新A將被覆蓋。 – laune
什麼是您不清楚的?由於'a1 = b;'和'a2 = b','a1'和'a2'都包含'B'的實例(實際上甚至是相同的實例),並且由於多態性(或者更精確的後期綁定 - 也稱爲動態綁定)方法'printDescription'的代碼在運行時決定,並且基於實例的實際類型(而不是引用)。 – Pshemo