Первый вызов в конструкторе подкласса - это вызов конструктора суперкласса (требуется, добавляется компилятором при необходимости). Таким образом, когда нужное значение должно быть рассчитано в конструкторе подкласса, «стратегия конструктора» невозможна. В таком случае может быть использована стратегия ниже:
Объявите метод abstracct в суперклассе, возвращая требуемое значение, например:
protected abstract String getValue();
В суперклассе везде, где вам нужно значение, используйте метод getValue()
.
В подклассе сохраните значение как личное поле, например:
private String value;
В подклассе инициализируйте / установите значение (например, в конструкторе) и реализуйте абстрактный метод (обязательно, иначе класс не компилируется):
@Override
protected String getValue() {
return value;
}