私はこのライブラリを使用していますが、いくつかのスーパークラスでいくつかのメソッドをオーバーライドする必要がありました。私が今やっているのは、必要なクラスを拡張し、そのスーパークラスからオーバーライドする必要があるメソッドを再定義することです。
class A { ... }
class B extends A { ... }
class C extends A { ... }
class myD extends B {
protected void overriddenAfunction() { ... }
}
いくつかのクラスが同じスーパークラスを拡張し、すべてのサブクラスで同じオーバーライドされたメソッドを使用する場合 (C で overridenAFunction() の同じ定義も必要な場合など)、これは明らかに適切ではありません。
これをきれいにするデザインパターンや方法はありますか?私はあなたがこのようなことができると想像しています:
class A { ... }
class B extends A { ... }
class C extends A { ... }
class myD extends A {
private A BorC = null;
public myD(A BorC) {
this.BorC = BorC;
}
protected void overriddenAfunction() { ... }
public void overriddenBfunction() {
((B) BorC).overriddenBfunction();
}
public void overriddenCfunction() {
((C) BorC).overriddenCfunction();
}
}
Usage:
A testB = new myD(new B());
A testC = new myD(new C());
ただし、それが機能する場合でも、B と C のすべてのメソッドを挿入する必要があります。
より良い方法または回避策はありますか? 私がやりたいのは、ライブラリの再パッケージ化を避けることだけですが、それが本当に最善の解決策だと思いますか?
B と C のコピーを作成して myD を拡張し、myD が A を拡張することもできると思います。このライブラリにはすべてのソース ファイルも用意されているので、これまたは同様のことができます。