抽象クラスがA
あり、すべてのサブクラスに特定のフィールドを持たせたいとします。抽象フィールドを定義できないため、これは Java では不可能です。
回避策 1:必要な値を提供するメソッドをサブクラスに強制的に実装させます。
abstract class A {
abstract int getA();
}
欠点: 各サブクラスは、必要な抽象フィールドごとにメソッドを実装する必要があります。これにより、多くのメソッドが実装される可能性があります。
利点: メソッドgetA
を抽象クラスで使用A
し、各サブクラスでメソッドを実装せずにメソッドを実装できます。ただし、メソッドの背後にある値は、抽象クラスによって上書きできません。
回避策 2:サブクラスに強制的に抽象クラスに値を与えることにより、抽象フィールドをシミュレートします。
abstract class A {
int a;
public A(int a) {
this.a = a;
}
}
欠点: 複数のフィールド (> 10) がある場合、スーパー コンストラクターの呼び出しは見栄えが悪く、ややこしくなります。
利点a
:抽象クラスでフィールドを使用A
し、各サブクラスでメソッドを実装せずにメソッドを実装できます。さらに、値a
は抽象クラスによって上書きできます。
質問:目標を達成するための一般的な方法はどれですか? たぶん、上記のものよりも良いものがありますか?