覆盖 Java 中的常量

2022-09-02 01:23:20

我有两个类扩展同一个抽象类。它们都需要相同的常量,但具有不同的值。我该怎么做?一些示例代码来显示我想要执行的操作。

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 未初始化 int 类 A。我怎样才能让它工作?对于 B 的所有实例,CONST 的值应为 1,对于 C 的所有实例,CONST 的值应为 2,对于 A 的所有实例,CONST 的值应为 1 或 2。有没有办法使用静态技术来实现这一点?


答案 1

你不能这么做。

但是,您可以执行此操作:

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());
}

答案 2

如果一个常量有一个变量值,它就不再是一个常量了。静态字段和方法不是多态的。您需要使用公共方法来执行所需的操作。


推荐