【发布时间】:2014-01-30 12:23:42
【问题描述】:
我有几个类都继承了相同的基类,并且需要在启动时在函数中初始化一个静态属性。我是这样实现的:
public abstract class Base {
protected static Model model;
}
public class Inherited extends Base {
static {
model = initializationFunction();
}
}
public class OtherInherited extends Base {
static {
model = otherInitializationFunction();
}
}
// Example of use
Base[] inheriteds = new Base[] { new Inherited(), new OtherInherited() };
for (int i = 0; i < inheriteds.length; i++) {
doStuff(inheriteds[i]).model; // This will always use the same model (last defined)
}
所以类在开始时初始化静态成员。但它似乎为整个基类设置了模型的值,因此所有类实际上都具有相同的模型。
我需要model 是静态的,因为它需要每个子类只存在一次。我的问题是如何为每个子类拥有一个静态模型,同时仍确保它在父类中定义(因此,如果一个类没有定义它,它在父类中定义)。
继承类中受保护的静态成员的预期行为是什么?我应该如何为每个类设置这个成员的版本,仍然是静态的(我不希望它为每个实例重复)?
【问题讨论】:
-
静态字段属于 Base,无论您从何处访问它。
-
这很简单——静态对象引用确实只存在一次。你为什么要把它变成静态的?
-
如果模型绑定到子类,那么它应该在子类中声明,而不是在基类中。
-
我需要它是静态的,因为
model对象每个子类只需要存在一次。我的问题是每个子类有一个静态模型,同时仍然确保它在父类中定义。 -
@Malharhak 你不能那样做。您必须在每个子类中定义变量。
标签: java inheritance static polymorphism