Java 如何(可以?)编写一个扩展类和子类的类
我有一个问题,我不确定是否有答案,但值得一试,因为我不想维护两份代码 我有一个库,其中B类是a类的子类。我自己编写了一个C类,它扩展了a类。我想让B扩展C而不是a,但是因为a和B是第三方库,我没有源代码,我不知道如何做 目前,我知道的唯一解决方案是将C类复制为D类,并将其扩展为B,然后在代码中引用D而不是B 换言之,我想我正在尝试扩展一个超类,然后扩展到子类 我希望这篇文章足够连贯Java 如何(可以?)编写一个扩展类和子类的类,java,Java,我有一个问题,我不确定是否有答案,但值得一试,因为我不想维护两份代码 我有一个库,其中B类是a类的子类。我自己编写了一个C类,它扩展了a类。我想让B扩展C而不是a,但是因为a和B是第三方库,我没有源代码,我不知道如何做 目前,我知道的唯一解决方案是将C类复制为D类,并将其扩展为B,然后在代码中引用D而不是B 换言之,我想我正在尝试扩展一个超类,然后扩展到子类 我希望这篇文章足够连贯 谢谢
谢谢这听起来像是一种情况,你可能想考虑把你的类委托给类库,而不是子类。 然后,您应该能够拥有一个具有您正在添加的任何功能的类,并通过委托访问A和B的函数 取决于你实际做的事情的细节,这可能是一个错误
有了关于这些类的更多细节,我可能会给出一个更清晰的建议…想想你真正想做的事情:你有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中包含的所有内容编写新方法。你为什么要这样做?无法做到;不应该这样做。如果我理解正确,
B类扩展A
,C类扩展A
。您希望B扩展C。是的;A和B是图书馆的一部分。我很困惑。。。你说你想要B扩展C
,但是一个可能的替代方法是创建D
,这样C==D
和D扩展B
。这不是意味着你想要C扩展B
?你可以控制C
,所以让它扩展B
。实际上,他描述它的方式,最终的结果是:类B扩展了C{}
,而不是类C扩展了B{}
,他想在继承树中的A和C之间“插入”他自己的类。