Ответ 1
@pst комментарий приводит к этому решению.
Это невозможно сделать с переменной. Но абстрактному классу может потребоваться реализация определенного метода: этот метод может вернуть применимое значение
От объявления функции abstract
для установки или возврата переменной вы можете принудительно реализовать любой подкласс.
Далее, функция должна вызываться каждым отдельным подклассом внешнего класса. Это означает, что это должно быть сделано где-то во внешнем классе. Это можно сделать в конструкторе без аргументов внешнего класса, не беспокоясь о подклассах, вызывающих super
:
Примечание. Если конструктор явно не вызывает конструктор суперкласса, компилятор Java автоматически вставляет вызов конструктору без аргументов суперкласса. Если у суперкласса нет конструктора без аргументов, вы получите ошибку времени компиляции. У объекта есть такой конструктор, поэтому, если Object является единственным суперклассом, проблем нет. (Java docs: Super)
Исходя из этого, это решение задержит и вернет force переменную, которая будет установлена, если:
- В суперклассе нет другого конструктора (поэтому супер не может использоваться в подклассе для вызова другого конструктора)
- Все остальные конструкторы в суперклассе по-прежнему вызывают конструктор по умолчанию внутри
Код:
суперкласса:
public abstract class SuperClass {
// Variable all inner classes must set
static int myVar = 0;
public SuperClass() {
myVar = giveValue();
}
public abstract int giveValue();
}
Подкласс:
public class SubClass extends SuperClass {
@Override
public int giveValue() {
return 5; // individual value for the subclass
}
}