我看到这个问题的变种,但是它们都没有真正解决我的问题。
假设我正在使用类来构建一个军队。 在继承结构的顶部,我有一个抽象的 "Unit" 类。 然后是一个抽象的 "Flying"、"Ground" 和 "Building" 类,它们扩展了 Unit。 接着是一个具体的 "Helicopter" 和 "Jet" 类,它们扩展了 Flying。 还有一个具体的 "Soldier" 和 "Tank" 类,它们扩展了 Ground。 最后是一个扩展 Building 的 "HQ" 和 "Supply"。
以下是“Soldier”类下的一个方法:
我希望“敌人”可以是任何一种单位形式。这是因为士兵应该能够攻击建筑和其他地面单位,但我不希望士兵能够攻击飞行物体。
显然的问题是,因为我将“敌人”声明为一个“单位”,它不知道属于哪个子类,因此试图找到不存在的“单位”超类。
我相信我可以为每个单位设置getter手动设置其类型...但那样更费力,也不够高效。
假设我正在使用类来构建一个军队。 在继承结构的顶部,我有一个抽象的 "Unit" 类。 然后是一个抽象的 "Flying"、"Ground" 和 "Building" 类,它们扩展了 Unit。 接着是一个具体的 "Helicopter" 和 "Jet" 类,它们扩展了 Flying。 还有一个具体的 "Soldier" 和 "Tank" 类,它们扩展了 Ground。 最后是一个扩展 Building 的 "HQ" 和 "Supply"。
以下是“Soldier”类下的一个方法:
public void attack(Unit enemy){
if(enemy.getSuperclass().equals(Flying)){
System.out.print("Soldiers cant attack flying units");
}
else{
//Code to attack enemy here
}
我希望“敌人”可以是任何一种单位形式。这是因为士兵应该能够攻击建筑和其他地面单位,但我不希望士兵能够攻击飞行物体。
显然的问题是,因为我将“敌人”声明为一个“单位”,它不知道属于哪个子类,因此试图找到不存在的“单位”超类。
我相信我可以为每个单位设置getter手动设置其类型...但那样更费力,也不够高效。
attack(Flying enemy)
attack(Ground enemy)
attack(Building enemy)
。 - Joan