繁体   English   中英

访问扩展类方法

[英]Access extended class method

我有一个名为Occupant extended Occupant classes ,并针对不同的乘员类型(例如Animal,Food,Tools,Treasure) 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实例和动物是的一个子类Occupant并且具有getDanger()方法。 否则,先检查一下

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

相关:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM