我包括代碼的輸出是很醜陋,但它只是一個代碼,瞭解不同的事情怎麼可以在Java中工作。被質疑的行標有代碼下半部分的評論。引用類型
class CsTorta extends Torta{
public CsTorta retegez(CsTorta a){
....
}
public CsTorta retegez(Torta a){
System.out.println("This method"); //<-----it calls this one and not the one above
....
}
}
public class NewClass {
public static void main(String[] args) {
Torta tt=new Torta(5);
Torta tcs=new CsTorta(3);
CsTorta cs=new CsTorta(4);
System.out.println("");
System.out.println(tcs.retegez(tcs)); //The line in question uses the cstorta retegez method (marked with "This method")
}
}
雖然TCS在編碼時類型是參考的類型,在運行時,當我把它識別出其一個cstorta類型tcs.retegez方法,但是這是相同的TCS參數保持引用類型(那就是爲什麼它使用cstorta標記的方法)。
我的問題是:我的結論是否正確:如果程序調用方法,程序只檢查「真實」類型的對象,如果不是,則使用引用類型?
好吧,我做到了。 –
正確的擴展對象在Java中有點棘手,並可能導致延遲的運行時異常。 –
是的,Java僱傭了[Single-dispatch](https://www.wikiwand.com/en/Dynamic_dispatch#/Single_and_multiple_dispatch) –