我有一个叫Occupantextended 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?

09-30 18:50
查看更多