覆盖Java中的常量

时间:2011-12-11 21:11:19

标签: java inheritance constants override

我有两个扩展相同抽象类的类。它们都需要相同的常数,但具有不同的值。我怎样才能做到这一点?一些示例代码,用于显示我想要做的事情。

abstract class A {
   public static int CONST;
}

public class B extends A {
   public static int CONST = 1;
}

public class C extends A {
   public static int CONST = 2;
}

public static void main(String[] args){
    A a = new B();
    System.out.println(a.CONST); // should print 1
}

上面的代码没有编译,因为CONST没有在类A中初始化。我怎样才能使它工作?对于B的所有实例,CONST的值应为1,对于所有C的实例,CONST的值应为2,对于所有A的实例,CONST的值应为1或2.对于此,是否有任何方法可以使用静态?

2 个答案:

答案 0 :(得分:22)

你做不到。

但是你可以这样做:

abstract class A {
   public abstract int getConst();
}

public class B extends A {
   @Override
   public int getConst() { return 1; }
}

public class C extends A {
   @Override
   public int getConst() { return 2; }
}

public static void main(String[] args){
    A a = new B();
    System.out.println(a.getConst());
}

答案 1 :(得分:6)

如果常量具有变量值,则它不再是常数。静态字段和方法不是多态的。您需要使用公共方法来执行您想要的操作。