扩展类中的初始化

时间:2016-05-06 19:21:46

标签: java static initialization parent

我对父类的初始化感到困惑。我需要简要解释一下它是如何工作的。

public class Bullet extends NextUnit {

    public static int numBullets;

    public Bullet() {
        super();
    }

    public Bullet(GameMain gameMain, AnimInfo animInfo, double x,double y, double xOnMap, double yOnMap,
        double degree, double speed, double speedBackward, double speedRotate, int state) {
        super(gameMain, animInfo, x, y, xOnMap, yOnMap, degree, speed, speedBackward, speedRotate, state);
    }

    // other parts of code are omitted 
}

我在哪里初始化numBullets?

3 个答案:

答案 0 :(得分:1)

您是否打算将其声明为静态?所有实例都将共享一个静态变量。您可以简单地将其值设置为内联(如果它是常量)或在其他位置设置一个赋值。

如果不打算在“bullet”的所有实例之间共享,则删除static并将其设置为每个构造函数中的默认值(超级之前或之后)。如果您需要其他参数,只需添加它们。

您是否打算计算已实例化的Bullet的数量?然后你只需要做一些事情,比如将它初始化为0并在两个构造函数中递增1。

答案 1 :(得分:1)

  

我在哪里初始化numBullets?

首先,您应该了解该变量已经使用默认值(0的{​​{1}})进行了初始化。您可以使用以下方法初始化变量:

  1. 静态初始化块int
  2. 静态方法,例如static { numBullets = 1; }
  3. 直接与声明public static int increaseAndGet() { return ++numBullets; }
  4. 一起使用

    变量public static int numBullets = 1;不是实例成员,它是变量。 numBullets与父类无关,它只是numBullets类的一部分。您应该使用Bullet成员与之互动。

    1. 与实例成员一起实现聪明的目标。
    2. 在您的情况下,我建议编写下一个代码段:

      static

答案 2 :(得分:0)

首先,您不需要为 numBullets 指定默认值,默认情况下为零。如果您希望它具有其他值,您可以使用内联赋值来执行此操作:

public static int numBullets = 43;

或使用这样的静态块:

public static int numBullets;
static {
  numBullets = 44;
}