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

标签 java static abstract-class

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

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

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

最佳答案

Does each subclass hold its own static normalizingConstants?

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

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

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

class MinusOp extends Operation {

    private static double[] normalizingConstants;
...

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

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

关于java - 如何为子类提供静态字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35626272/

相关文章:

java - REST Web 服务 GET 方法可以持久化实体

java - 滚动时如何固定 PopupPanel 相对于页面的位置

java - 2 Ip 的一个地址?

c++ - 为什么将静态类内初始化成员传递给采用 const 引用的函数需要该成员具有定义?

java - 从 JAVA 中的一个抽象方法重载方法

java - 在java中组合2个对象

java - 在这种情况下您真的需要无状态 session bean 吗?

c# - 为什么静态类不能有析构函数?

java - 需要抽象类和接口(interface)?

c++ - 为什么抽象类有虚表?