我有一个问题,我不确定是否有答案,但值得一试,因为我不想保留两份代码。
我有一个库,其中类B是类A的子类。我自己写了一个类C,它扩展了类A.我想这样做,以便B扩展C而不是A,但是因为A和B是我没有来源的第三方图书馆,我不知道该怎么做。
目前,我所知道的唯一解决方案是将我的C类复制为D类,并将其扩展为B,然后在我的代码中引用D而不是B.
我想换句话说,我正在尝试扩展一个超类,然后传播到子类。
我希望这篇文章足够连贯。
谢谢!
答案 0 :(得分:2)
这听起来像你可能想要让你的类委托给库类而不是子类化它们。
然后你应该能够拥有一个具有你所添加的能力的课程,并通过授权访问A和B的功能。
根据您实际执行的操作的详细信息,这可能是Decorator Pattern。
关于这些课程的更多细节,我或许可以给出更明确的建议......
答案 1 :(得分:-1)
想想你真正喜欢做什么:你有A,B和C类
A
/ \
B C
其中,你写了C; A和B是第三方。你希望C是B的子类,它只是:
A
/
B
/
C
这在概念上不是问题,重写C所以你有
class A {}
class B extends A {}
这些都是第三方且不可更改。现在你有了
class C extends B {}
,这给出了你描述的内容。但是,由于你发现它很难,我怀疑你可能会遇到类似冲突的方法名称。如果是这样,聚合就是你的朋友:
class Cprime {
A a;
B b;
现在为要包含在A或B中的所有内容编写新方法。