[英]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.