2011-12-07 50 views
1

我在父(Speler)有一個功能,被稱爲kiesKaart超子功能的

public Kaart kiesKaart(int spelerIndex){...} 

在我的子類的功能,我有它覆蓋的其他參數相同的功能(我有@Override在它之前,改變這@Override()沒有幫助...)超級功能:

public int kiesKaart(Kaart lak){...} 

在我主我有Spelers,其中只有第一個是Speler和第一個數組Ë別人AiSpelers(這是子類的名稱):

spelerArr[0] = new Speler(hand[0]); 
for (int i=1;i<AANTALSPELERS;i++) { 
    spelerArr[i] = new AiSpeler(hand[i]); 
} 

後來在我的代碼解決spelerArr[i].kiesKaart,所以現在我想要的代碼,以解決kiesKaart正確的實例。

我該怎麼做?

+0

你不重寫你的基類功能的快速參考 - 你是超載。註釋它沒有區別,它只是一個標誌,爲您的利益。 – DaveRlz

回答

1

使用@Override在這裏不會做任何事情,因爲這兩種方法是不同的。第一個返回類型Kaart給出int,第二個返回類型int給出Kaart

換句話說,爲確保您正確調用正確的方法,您需要確保發送正確的參數(第一個爲int,第二個爲Kaart)。

+0

謝謝,這有助於很多,但我仍然得到一個錯誤,主要說它期望一個整數(來自超級類),即使我編輯子也返回卡爾特 –

+0

,我發送正確的參數在每個案件。在第一個是不抱怨,第二個他說他想要一個整數 –

+0

它抱怨說,你沒有發送正確的參數嗎?或者你將結果投射到一個'Kaart'對象? – Jon

2

簽名不匹配。所以你不會超越超類中的方法。如果您使用@Override,編譯器會發出抱怨。該方法的簽名還包括參數的類型。

+2

廢話。我甚至沒有注意到這一點。 – Casey

0

我相信你將不得不使用instanceof以確定它是否是一個SpelerAiSpeler並呼籲kiesKaart之前將其轉換爲合適的對象。

2

您通過創建一個具有相同名稱和不同參數的新方法來重載該方法。覆蓋是另一回事。

0

您正在重載您的超類方法,而不是重寫。有一個註釋不會改變這個事實。

如果你想確定調用對象的類型(多態性),你必須重寫方法 - 相同的參數列表,相同的返回類型或子類(Java 5之後),當然也是相同的名稱。

0

This可能是有幫助的關於什麼是可能的,什麼不是,以及如何調用它