我已經寫下了多態性的例子。爲什麼子類中的新方法不能通過超類參考變量訪問
package tsys;
public class DynamicPolymorphism {
public void eat(){
System.out.println("DynamicPolymorphism");
}
}
class AnotherClass extends DynamicPolymorphism{
public void eat(){
System.out.println("Another Class");
}
public void consume(){
System.out.println("consume");
}
}
class TestPolymorphism{
public static void main(String args[]){
DynamicPolymorphism dp = new AnotherClass();
dp.eat();//Works fine
dp.consume();//compile time error
}
}
現在問題是爲什麼編譯器會抱怨dp.consume()
?我在一次採訪中詢問了這個問題,我解釋了原因爲 「在編譯時,編譯器只知道類型爲dp
的引用類型爲DynamicPolymorphism
因此編譯器無法找到consume
方法。」
訪問者對我的答案進行計數,並詢問幕後編譯器給出了錯誤,但我們將變量dp
指向AnotherClass
的實例。
我還可以解釋面試官對櫃檯問題嗎?
Downvoters,你能解釋一下問題出在哪裏,我可以改進嗎? –
我會要求澄清,因爲我不明白反問題。沒有「幕後」。編譯器知道'dp'是一個'DynamicPolymorphism',所以它只會允許它知道的調用,即調用'DynamicPolymorphism'聲明的方法。基本上你說什麼。這是Java [靜態類型](https://stackoverflow.com/q/1517582/5221149)語言的基本性質。 – Andreas
@Andreas你的回答很貼切,我只是在看這裏,有沒有什麼,我錯過了關於多態性。謝謝 –