java - 我的子类如何正确继承静态变量

标签 java inheritance static superclass

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/

相关文章:

java - 声明扩展某种类型的字段

java - 在 Java 的双重算术中得到错误的答案

Java 泛型 : override method that differs in parameterized return type

java - 我的新游戏 JButton 无法运行?

java - 如何在 javadoc 注释中更改 javadoc 中表行的颜色

java - 避免并行继承层次结构

java - 来自父类(super class)和子类的继承 getter

scala - 为什么单例对象创建的scala程序不需要静态main方法?

java - 为什么要在 Java 中使用静态嵌套接口(interface)?

C 相当于 Java 静态 block (启动时运行一次)