次のシナリオがあるとします。
abstract class A {
abstract method1();
abstract method2();
}
class B extends A {
method1() {
// implementation 1
}
method2() {
// implementation 3
}
}
class C extends A {
method1() {
// implementation 1
}
method2() {
// implementation 4
}
}
class D extends A {
method1() {
// implementation 2
}
method2() {
// implementation 4
}
}
結論: 同じクラスのいくつかのサブクラスで、異なるメソッドに対して異なるメソッド実装を使用しています。
問題は、異なるサブクラスで同じ実装を使用していることです。私の質問は、これらの一般的な実装をどうするかということです?
それを行う論理的な方法は、別のレベルの抽象化を作成することですが、それは共通の実装を持つ 1 つのメソッドがある場合にのみ機能します (Java には多重継承がないため)。また、最も一般的に使用される実装をスーパークラスに置き、それを他のクラスで別の方法で実装することもできます。ただし、他のクラスの追加によって最も一般的な実装が変更される可能性があるため、私はそうしません。また、スーパークラスでメソッドを抽象化しておきたいと考えています。
「エレガントな方法」で私の問題を解決するパターンはありますか?