我正在用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{}

09-30 15:23