我正在使用这个库,我必须在一些超类中覆盖一些方法。我现在所做的是扩展我需要的类,并重新定义我需要从它的超类中重写的方法。
class A { ... }
class B extends A { ... }
class C extends A { ... }
class myD extends B {
protected void overriddenAfunction() { ... }
}
当几个类扩展相同的超类并且我希望所有子类都使用相同的override方法时(例如,如果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扩展A时扩展myD。这个库也有所有可用的源文件,所以我可以这样做或类似的东西。
答案 0 :(得分:0)
无法以允许A
和B
从新功能中受益的方式覆盖C
。您只有两个我可以看到的选项,您可以同时提到它们:
A
并重新打包库MyD
延长A
,然后制作B
和C
的副本,而不是MyD
。