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

How to provide static field to subclasses?

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

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();
    }
}

是否每个子class 都有自己的静态规范化常量?如果我调用 AddOp.normalizingConstants[0]MinusOp.normalizingConstant[0] 我想要不同的结果。如何实现?

Does each subclass hold its own static normalizingConstants?

没有,只有一个normalizingConstantsOperation.normalizingConstants)。 static 字段绑定到声明它们的 class

If I call AddOp.normalizingConstants[0] and MinusOp.normalizingConstant[0] I want different results. How can this be achieved?

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

class MinusOp extends Operation {

    private static double[] normalizingConstants;
...

请注意,您的 normalizingConstants 字段只能从声明的 class 中访问,因为它们被声明为 private.

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