我正在用Java开发游戏,并且试图创建可以发射弹丸的敌人。我正在定义所有敌人类型的基类,并且已经定义了弹丸类。我想做的是在敌方基础类中定义一个类类型变量,以及一个shootProjectile()方法,该方法将在被调用时为定义的弹丸类创建一个新实例。伪代码:
public class EnemyClass extends GameCharacter {
protected Class projectileType;
protected int a;
protected int b;
// Constructor and other stuff here
public void shootProjectile() {
projectileType newProjectile = new projectileType(a, b);
}
}
public class MyEnemySubClass extends EnemyClass {
public MyEnemySubClass() {
super();
projectileType = MySuperProjectile;
}
// Rest of class stuff here
}
public class MySuperProjectile extends Projectile {
public MySuperProjectile(parameter a, parameter b) {
// Constructor stuff using a and b
}
// Other projectile-related stuff
}
当然,我的想法是,在敌方子类中,我需要做的就是定义他们要射击的弹丸类,而基类中的shootProjectile()方法将完成其余的工作。
我不确定如何实现这一目标。我曾经研究过定义泛型,但不确定如何实现此目的,也不确定是否完全了解它们的工作方式。在Java中是否甚至有可能发生这种情况,还是我需要为EnemyClass的每个子类重写shootProjectile,以在攻击时创建自己的弹丸?
提前致谢!
最佳答案
如果我对您的理解正确,则无需使用泛型。
如果要使用Enemy
的不同实现方式拍摄Projectile
的不同实现方式,则只需在Projectile shootProjectile()
抽象类中定义抽象方法Enemy
并按照您认为适合每个Enemy
子类的方式来实现它。
但是,如果您出于某种原因坚持使用它们。他们将参数T
添加到Enemy
类。并将方法定义为T shootProjectile()
。例:
abstract class Enemy<T extends Projectile> {
abstract T shootProjectile();
}
然后再次。在子类中执行:
class Sniper extends Enemy<SniperRifleBullet>{
@Override
SniperRifleBullet shootProjectile() {
return new SniperRifleBullet();
}
}
class Projectile{}
class SniperRifleBullet extends Projectile{}