我有一个名为Occupant
和extended Occupant classes
的课程,用于不同的占用者类型,例如动物,食物,工具,宝藏。
所有占用者都被放置在GridSquares
上,A Square可容纳 3名占用者。
当给出位置时,乘员类有一个方法来获取GridSqure上的所有占用者。 该方法将返回带有扩展占用者类的乘员数组。(E.G:动物,工具和食物)。
Occupant[] allOccupants = newGridSquare.getOccupants();
for ( Occupant oneOccupant : allOccupants)
{
if(oneOccupant.getStringRepresentation() == "A")
{
player.reduceStamina(oneOccupant.getDanger());
}
}
编译器无法访问Animal类中的getDanger
方法,因为我已将其指定为Occupant。
如何在扩展的占用者类动物中访问getDanger方法?
答案 0 :(得分:1)
您可以投射实例
for ( Occupant oneOccupant : allOccupants)
{
if("A".equals(oneOccupant.getStringRepresentation()))
{
Animal animal = (Animal) oneOccupant;
player.reduceStamina(animal.getDanger());
}
}
假设"A"
是Animal
实例的标识符,而Animal是Occupant
的子类,并且有getDanger()
方法。否则,先做检查
if (oneOccupant instanceof Animal) {
Animal animal = (Animal) oneOccupant;
player.reduceStamina(animal.getDanger());
}
相关:
答案 1 :(得分:0)
由于getDanger在Occupant类下不存在,但在特定的Animal类中不存在。因此,你需要向一个职业分类转到一个动物类。
另一个解决方案是在Occupant类下声明getDanger并在扩展类下实现它。对于除Animal之外的类,您可以提供空实现。但从设计的角度来看,这不是一个好的方法,但有时会使用遗留代码