如何为子类提供静态字段?
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?
没有,只有一个normalizingConstants
(Operation.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)的新实例时都会重新初始化数组。
我有一个名为 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?
没有,只有一个normalizingConstants
(Operation.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)的新实例时都会重新初始化数组。