如何为子类提供静态字段?

时间:2016-02-25 11:41:25

标签: java static abstract-class

我有一个名为operation.java的抽象超类和几个扩展此类并表示操作的子类。每个这样的子类都应该包含一个规范化内容数组,它应该是静态的,因为它是全局的。我有以下示例:

abstract class Operation {

    private static double[] normalizingConstants;

    protected Operation() {
        normalizingConstants = new double[10];
    }
}

class AddOp extends Operation {

    protected AddOp() {
        super();
    }
}

class MinusOp extends Operation {

    protected AddOp() {
        super();
    }
}

每个子类是否都拥有自己的静态normalizingConstants?如果我拨打AddOp.normalizingConstants[0]MinusOp.normalizingConstant[0],我想要不同的结果。如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

  

每个子类是否都拥有自己的静态normalizingConstants?

不,只有一个normalizingConstantsOperation.normalizingConstants)。 static字段与声明它们的相关联。

  

如果我调用AddOp.normalizingConstants [0]和MinusOp.normalizingConstant [0],我想要不同的结果。如何实现这一目标?

如果需要不同的normalizingConstants数组,则需要在子类中声明另一个静态变量,例如

class MinusOp extends Operation {

    private static double[] normalizingConstants;
...

请注意,您的normalizingConstants字段只能在delaring类中访问,因为它们被声明为private

此外,您不应在构造函数中初始化静态数组 - 请改用static initializer。否则,每次创建类(或任何子类)的新实例时,都会重新初始化数组。