我正在寻找一种解决当前问题的简单方法。
我有:
public class Projectile{
....
}
public class Bomb extends Projectile{
....
public void move(){
//travels in arc
}
}
public class Bullet extends Projectile{
....
public void move(){
//travels straight
}
}
现在说我有一个既容纳炸弹又包含子弹的大型射弹ArrayList。我正在寻找一种在炸弹和子弹中调用move方法的方法。
for(Projectile projectile: projectiles){
//functional equivalent of projectile.move();
}
我的特定项目将具有各种各样的子类型,因此我试图避免为每个可能的子类型检查“实例”。
我知道我可以输入Projectile作为接口,但这是我的计划B,因为Projectile类包含大量信息。
是否有更好的做事方法,或者我最好的选择是上述两种解决方案之一?
最佳答案
弹丸类应声明具有受保护或公共访问权的非静态抽象方法move(),并且此类的每个子级(如Bomb或Bullet)都必须实现此方法。
编辑:将移动方法声明为抽象,除非您不希望Parent类中的默认实现。否则,继续进行方法重写,以使子类重写父类的行为。