Вопрос

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

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? Как? Я бы предпочел не использовать переменные экземпляра/методы, если смогу избежать этого.

Спасибо!

РЕДАКТИРОВАТЬ:

Константа - это имя таблицы базы данных. Каждый дочерний объект - это мини.

Это было полезно?

Решение

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

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

class Child extends Parent {
    public static final String ACONSTANT = "some value";
    public String getACONSTANT() { return ACONSTANT; }
}

Другие советы

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

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

Parent.ACONSTANT == null ; ==> true

Parent p = new Parent(); p.ACONSTANT == null ; ==> true

Parent c = new Child(); c.ACONSTANT == null ; ==> true

Пока вы используете родитель в качестве эталонного типа Aconstant, будет нулевым.

Давайте сделаем что -то подобное.

 Child c = new Child();
 c.ACONSTANT = "Hi";
 Parent p = c;
 System.out.println(p.ACONSTANT);

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top