基本上我在這裏有一個小問題。對象引用類型(動態綁定)的問題?
我有一個超類和一個子類。我應該執行一個任務,從子類中執行一個方法,該方法將覆蓋超類中的方法。這工作正常。我遇到的問題是「動態綁定」。當我將引用變量類型聲明爲與子類相同的類時,它工作正常。但是,當我將類型聲明爲超類時,它不會識別任何子類的方法甚至存在。
下面是一個例子。我有一個名爲船舶類和船舶的另一個子類,稱爲BabyShip
如果我宣佈爲ShippyShip的參考:
BabyShip subref = new BabyShip();
它工作正常。然而,當我把它聲明爲:
Ship subref = new BabyShip();
編譯器甚至不承認任何從BabyShip的方法,如果我宣佈子參考的類型爲船舶......但我的書中明確表示,它應該。它爲什麼這樣做?
當我編譯它時,它會給出一個正常的找不到符號錯誤。
ShipTester.java:8: error: cannot find symbol
ship.setMaxPassengers(1);
^
symbol: method setMaxPassengers(int)
location: variable ship of type Ship
1 error
對不起。你是對的,我沒有清楚地看到它只能執行類型爲類的方法。我想我需要使用另一種解決方法。 – Johnny
@Johnny:如果你的代碼只能用於特定的子類,那麼它也應該是你的變量的類型。 –