在Java中继承静态变量

时间:2010-10-12 02:32:19

标签: java inheritance static polymorphism static-variables

我想进行以下设置:

abstract class Parent {
    public static String ACONSTANT; // I'd use abstract here if it was allowed

    // Other stuff follows
}

class Child extends Parent {
    public static String ACONSTANT = "some value";

    // etc
}

这在Java中可行吗?怎么样?如果我可以避免它,我宁愿不使用实例变量/方法。

谢谢!

编辑:

常量是数据库表的名称。每个子对象都是一个迷你ORM。

2 个答案:

答案 0 :(得分:18)

你无法完全按照自己的意愿去做。也许可接受的折衷方案是:

abstract class Parent {
    public abstract String getACONSTANT();
}

class Child extends Parent {
    public static final String ACONSTANT = "some value";
    public String getACONSTANT() { return ACONSTANT; }
}

答案 1 :(得分:2)

在这种情况下你必须记住在java中你不能覆盖静态方法。发生了什么事就是隐藏了这些东西。

根据您放置的代码,如果您执行以下操作,则答案将为null

Parent.ACONSTANT == null ; ==> true

Parent p = new Parent(); p.ACONSTANT == null ; ==> true

Parent c = new Child(); c.ACONSTANT == null ; ==> true

只要您使用Parent作为引用类型,ACONSTANT将为null。

让你做这样的事。

 Child c = new Child();
 c.ACONSTANT = "Hi";
 Parent p = c;
 System.out.println(p.ACONSTANT);

输出将为空。