我想进行以下设置:
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。
答案 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);
输出将为空。