Я использую эту библиотеку, и мне пришлось переопределить некоторые методы в нескольких суперклассах. Что я делаю сейчас, так это расширяю класс, который мне нужен, и переопределяю методы, которые мне нужно переопределить из его суперкласса.
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. В этой библиотеке также есть все доступные исходные файлы, поэтому я могу сделать это или что-то подобное.