Java 访问扩展类方法

Java 访问扩展类方法,java,bluej,Java,Bluej,我有一个名为乘员的类和扩展乘员类,用于不同的乘员类型,如动物、食物、工具、宝藏 所有乘客都被放置在网格方格上,一个方格最多可容纳3名乘客 乘员类别有一个方法,在给定位置时将所有乘员放置在网格上。 该方法将返回一个乘员数组,其中包含扩展的乘员类(例如:动物、工具和食物) 编译器无法访问Animal类中的getDanger方法,因为我已经将其指定为占用者 如何访问扩展乘员类动物中的getDanger方法?您可以使用该实例 for ( Occupant oneOccupant : allOccupan

我有一个名为
乘员
的类和
扩展乘员类
,用于不同的乘员类型,如动物、食物、工具、宝藏

所有乘客都被放置在
网格方格上
,一个方格最多可容纳3名乘客

乘员类别有一个方法,在给定位置时将所有乘员放置在网格上。 该方法将返回一个乘员数组,其中包含扩展的乘员类(例如:动物、工具和食物)

编译器无法访问Animal类中的
getDanger
方法,因为我已经将其指定为占用者


如何访问扩展乘员类动物中的getDanger方法?

您可以使用该实例

for ( Occupant oneOccupant : allOccupants)
{
    if("A".equals(oneOccupant.getStringRepresentation()))
    {
        Animal animal = (Animal) oneOccupant;
        player.reduceStamina(animal.getDanger());
    }
}
假设
“A”
动物
实例的标识符,动物是
乘员
的子类,并具有
getDanger()
方法。否则,首先进行检查

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

相关的:


因为getDanger不存在于乘员等级下,而存在于特定的动物等级中。所以你需要把一个居住者降到动物级


另一个解决方案是在Occupant类下声明getDanger,并在extended类下实现它。对于除Animal以外的类,可以提供空实现。但从设计的角度来看,这不是一个好的方法,但在与遗留代码相关的情况下,有时会采用这种方法:您的问题不清楚;你是说只有
动物
获取危险
方法,而
乘员
没有?请发布类的代码。@SotiriosDelimanolis这是另一个问题:)另外,您是否试图使用
stringRepresentation
来指示
占用者的类?在Java中,有许多更干净、更安全的方法可以做到这一点
instanceof
通常是最好的,而
enum
比字符串要好得多。
if (oneOccupant instanceof Animal) {
     Animal animal = (Animal) oneOccupant;
     player.reduceStamina(animal.getDanger());
}