Как обойти отсутствие абстрактных полей в 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: Какой обходной путь является наиболее распространенным способом достижения цели? Может быть, есть лучше, чем выше?