Переопределение констант в Java - PullRequest
20 голосов
/ 12 декабря 2011

У меня есть два класса, которые расширяют один и тот же абстрактный класс. Им обоим нужна одна и та же константа, но с разными значениями. Как я могу это сделать? Пример кода, показывающий, что я хочу сделать.

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. Как я могу заставить его работать? Значение CONST должно быть 1 для всех экземпляров B, 2 для всех экземпляров C и 1 или 2 для всех экземпляров A. Можно ли использовать для этого статику?

Ответы [ 2 ]

22 голосов
/ 12 декабря 2011

Вы не можете сделать это.

Вы можете сделать это, однако:

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());
}
6 голосов
/ 12 декабря 2011

Если константа имеет значение переменной, она больше не является константой.Статические поля и методы не являются полиморфными.Вам нужно использовать публичный метод, чтобы делать то, что вы хотите.

...