Наследовать статическую переменную в Java - PullRequest
4 голосов
/ 12 октября 2010

Я хочу иметь следующую настройку:

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.

Ответы [ 2 ]

18 голосов
/ 12 октября 2010

вы не можете сделать это именно так, как вы хотите. Возможно, приемлемый компромисс будет:

abstract class Parent {
    public abstract String getACONSTANT();
}

class Child extends Parent {
    public static final String ACONSTANT = "some value";
    public String getACONSTANT() { return ACONSTANT; }
}
2 голосов
/ 12 октября 2010

В этом случае вы должны помнить, что в Java вы не можете переопределить статические методы. То, что случилось, это скрыть вещи.

в соответствии с кодом, который вы указали, если вы выполните следующие действия, ответ будет нулевым

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

Вывод будет нулевым.

...