我有一个名为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]
,我想要不同的结果。如何实现这一目标?
答案 0 :(得分:1)
每个子类是否都拥有自己的静态normalizingConstants?
不,只有一个normalizingConstants
(Operation.normalizingConstants
)。 static
字段与声明它们的类相关联。
如果我调用AddOp.normalizingConstants [0]和MinusOp.normalizingConstant [0],我想要不同的结果。如何实现这一目标?
如果需要不同的normalizingConstants
数组,则需要在子类中声明另一个静态变量,例如
class MinusOp extends Operation {
private static double[] normalizingConstants;
...
请注意,您的normalizingConstants
字段只能在delaring类中访问,因为它们被声明为private
。
此外,您不应在构造函数中初始化静态数组 - 请改用static initializer。否则,每次创建类(或任何子类)的新实例时,都会重新初始化数组。