我见过这个问题的变体,但没有一个能真正解决我的问题。
可以说我正在建立一支有班级的军队。在我的继承结构的顶部,我有一个抽象的“单元”类。然后是扩展单元的抽象“ Flying ”、“ Ground ”和“ Building ”类。然后是扩展 Flying 的具体“直升机”和“喷气机”类。以及扩展地面的具体“士兵”和“坦克”类。最后是扩展建筑的“总部”和“供应”。
下面是“士兵”类下的一个方法:
public void attack(Unit enemy){
if(enemy.getSuperclass().equals(Flying)){
System.out.print("Soldiers cant attack flying units");
}
else{
//Code to attack enemy here
}
我希望敌人是任何形式的单位。这是因为士兵应该能够攻击建筑物和其他地面单位,但是我不希望士兵能够攻击飞行物体。
明显的问题是,因为我将敌人声明为Unit,它不知道它属于哪个子类,因此试图为不存在的 Unit 找到 SuperClass。
我敢肯定,我可以为每个手动设置单元类型的单元设置一个吸气剂……但这需要更多的工作,而且似乎效率不高。