【发布时间】:2013-04-09 22:11:50
【问题描述】:
我见过这个问题的变体,但没有一个能真正解决我的问题。
假设我正在建立一支有班级的军队。在我的继承结构的顶部,我有一个抽象的“Unit”类。然后是扩展单元的抽象“Flying”、“Ground”和“Building”类。然后是扩展 Flying 的具体“Helicopter”和“Jet”类。以及扩展地面的具体“Soldier”和“Tank”类。最后是扩展建筑的“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
}
我希望 enemy 是任何形式的单位。这是因为士兵应该能够攻击建筑物和其他地面单位,但是我不希望士兵能够攻击飞行物体。
明显的问题是,因为我将 enemy 声明为 Unit,它不知道它属于哪个子类,因此试图为 Unit 找到 SuperClass这不存在。
我确信我可以为每个手动设置单元类型的单元设置一个吸气剂……但这需要更多的工作,而且似乎效率不高。
【问题讨论】:
-
哇,在同一个 10 秒时间片内发布了 5 个等效答案!
-
您也可以使用接口,因为类继承可能会限制所有模型。但首先尝试继承很好。
-
instanceof 惊叹!
-
我建议在 Flying、Ground 和 Building 类中实现攻击方法,并重载,为每种可能的攻击实现一种方法:例如在 Flying 类中
attack(Flying enemy)attack(Groung enemy)@987654324 @
标签: java class object inheritance methods