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