Переопределение констант в Java
У меня есть два класса, которые расширяют один и тот же абстрактный класс. Оба они нуждаются в одной и той же константе, но с разными значениями. Как я могу это сделать? Некоторые примеры кода, чтобы показать, что я хочу делать.
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 class A. Как я могу заставить его работать? Значение CONST должно быть 1 для всех экземпляров B и 2 для всех экземпляров C и 1 или 2 для всех экземпляров A. Есть ли способ использовать статику для этого?
Ответы
Ответ 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
Если константа имеет значение переменной, она больше не является константой. Статические поля и методы не являются полиморфными. Вам нужно использовать общедоступный метод, чтобы делать то, что вы хотите.