我有一个名为 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/