Как обойти отсутствие абстрактных полей в Java?

Предположим, у нас есть абстрактный классA и мы хотим заставить все подклассы иметь определенное поле. Это невозможно в Java, потому что мы не можем определять абстрактные поля.

Workaround 1: Вынудить подклассы реализовать метод, который доставляет требуемое значение.

abstract class A {
  abstract int getA();
}

DrawbackКаждый подкласс должен реализовывать метод для каждого абстрактного поля, которое мы хотим иметь. Это может привести ко многим реализациям методов.

Advantage: Мы можем использовать методgetA в абстрактном классе и реализовать методы с ним вA без реализации их в каждом подклассе. Но значение метода не может быть перезаписано абстрактным классом.

Workaround 2: Смоделируйте абстрактное поле, заставив подкласс присвоить абстрактному классу значение.

abstract class A {
  int a;

  public A(int a) {
    this.a = a;
  }
}

Drawback: Когда у нас есть несколько полей (& gt; 10), вызов супер-конструктора будет выглядеть немного уродливо и запутанно.

Advantage: Мы можем использовать полеa в абстрактном классе и реализовать методы с ним вA без реализации их в каждом подклассе. Плюс ценностьa может быть перезаписано абстрактным классом.

Question: Какой обходной путь является наиболее распространенным способом достижения цели? Может быть, есть лучше, чем выше?

Ответы на вопрос(5)

Ваш ответ на вопрос