2013-09-22 74 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之外的其他类,则可以提供空的实现。但是,从设计的角度来看这不是一个好的方法,但有时候会使用遗留代码