public abstract class SuperClass {
public int x, y;
public static int z;
}
我希望 SuperClass 的每个子类都有静态变量 z。自然 z 将包含每个子类的不同值。我希望避免在每个子类中定义 z,因为它将成为值 x 和 y 的函数依赖;这可能吗?
最佳答案
与“每个实例一个”的实例变量不同,static
变量不是“每个子类一个”——它们是“每个声明类一个”。换句话说,SuperClass
的子类分享SuperClass.z
,但他们不能在逐个类的基础上“覆盖”它。
这并不意味着您不能自己实现它:创建您自己的整数子类存储的方法是添加一个 static Map<Class,int> zs
。至 SuperClass
,具有访问数据的可选功能:
public abstract class SuperClass {
public int x, y;
private static Map<Class,Integer> zs = new HashMap<Class,Integer>();
protected static int getZ(Class c) {
Integer res = zs.get(c);
return res == null ? -1 : res.intValue();
}
protected static void setZ(Class c, int v) {
zs.put(c, v);
}
}
class SubClassOne extends SuperClass {
public int getZ() {
return SuperClass.getZ(SubClassOne.class);
}
}
class SubClassTwo extends SuperClass {
public int getZ() {
return SuperClass.getZ(SubClassTwo.class);
}
}
关于java - 我的子类如何正确继承静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22460767/