0

我有一个班级Occupantextended Occupant classes针对不同的居住者类型,例如Animal、Food、Tools、Treasure

所有住户都放在上面GridSquares,A Square 最多可容纳3 位住户

Occupant 类有一个方法可以在给定位置时获取 GridSqure 上的所有 Occupants。该方法将返回一个具有扩展占用者类的占用者数组。(例如:动物、工具和食物)。

   Occupant[] allOccupants = newGridSquare.getOccupants();

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

             player.reduceStamina(oneOccupant.getDanger());

         }
     }

编译器无法访问getDangerAnimal 类中的方法,因为我已经将它分配为 Occupant。

如何在扩展的 Occupant 类Animal中访问 getDanger 方法?

4

2 回答 2

1

You can cast the instance

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

Assuming the "A" is an identifier for an Animal instance and Animal is a subclass of Occupant and has a getDanger() method. Otherwise, first do a check

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

Related :

于 2013-09-22T07:16:43.750 回答
0

由于 getDanger 在 Occupant 类下不存在,但在特定类 Animal 中存在。因此,您需要将 oneOccupant 降级为 Animal 类。

另一种解决方案是在 Occupant 类下声明 getDanger 并在扩展类下实现它。对于除 Animal 之外的类,您可以提供空实现。但从设计的角度来看,这不是一个好方法,但有时会在遗留代码的情况下使用

于 2013-09-22T07:21:15.810 回答