2013-09-22 75 views
0

我有一個名爲Occupantextended Occupant classes不同乘員類型動物,食品,工具,寶類。訪問擴展分類方法

所有居住者都被放置在GridSquares,一個廣場最多可容納3名乘客

乘員類有一個方法坐上GridSqure所有乘員的位置時給出。 該方法將返回一個乘員陣列與擴展乘員類(E.G:動物,工具和食物)。

Occupant[] allOccupants = newGridSquare.getOccupants(); 

    for (Occupant oneOccupant : allOccupants) 
     { 
     if(oneOccupant.getStringRepresentation() == "A") 
     { 

      player.reduceStamina(oneOccupant.getDanger()); 

     } 
    } 

編譯器不能在動物類訪問getDanger方法,只是因爲我已經賦予它作爲乘員。

我該如何訪問擴展Occupant類中的getDanger方法Animal

+1

相關:[如何比較Java中的字符串?](http://stackoverflow.com/questions/513832/how -do-i-compare-strings-in-java) –

+0

你的問題不清楚;你是說只有'動物'有一個'getDanger'方法,而'Occupant'不?請張貼課程代碼。 – chrylis

+0

@SotiriosDelimanolis多數民衆贊成在另一個問題:) –

回答

1

可以投實例

for (Occupant oneOccupant : allOccupants) 
{ 
    if("A".equals(oneOccupant.getStringRepresentation())) 
    { 
     Animal animal = (Animal) oneOccupant; 
     player.reduceStamina(animal.getDanger()); 
    } 
} 

假設"A"是用於Animal實例的標識符和動物是Occupant一個子類,並且具有getDanger()方法。否則,首先做一個檢查

if (oneOccupant instanceof Animal) { 
    Animal animal = (Animal) oneOccupant; 
    player.reduceStamina(animal.getDanger()); 
} 

相關:

0

由於getDanger沒有下乘員類但在具體類的動物存在。所以你需要貶低一個動物類動物。

另一種解決方案是你在Occupant類下聲明getDanger並在擴展類下實現它。如果除了Animal之外的其他類,則可以提供空的實現。但是,從設計的角度來看這不是一個好的方法,但有時候會使用遺留代碼