我有一个叫Occupant
和extended Occupant classes
的类,用于不同的乘员类型,例如动物,食物,工具,宝藏。
所有乘员均放置在GridSquares
上,一个Square最多可容纳3名乘员。
占用者类具有一种方法,可以在指定位置时获取GridSqure上的所有占用者。
该方法将返回具有扩展的乘员类的乘员数组(例如:动物,工具和食物)。
Occupant[] allOccupants = newGridSquare.getOccupants();
for ( Occupant oneOccupant : allOccupants)
{
if(oneOccupant.getStringRepresentation() == "A")
{
player.reduceStamina(oneOccupant.getDanger());
}
}
编译器无法访问Animal类中的
getDanger
方法,因为我已经将其分配为Occupant。如何在扩展的乘员类Animal中访问getDanger方法?
最佳答案
您可以投射实例
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());
}
相关:
How do I compare strings in Java?