ClassA
有两个孩子:ClassB
和ClassC
。
我们需要覆盖ClassA
的方法,但我们将使用ClassB
和ClassC
(使用修改后的方法)。
ClassA
,ClassB
和ClassC
都是我们无法修改的外部库的一部分。
是否可以在没有继承ClassB
和ClassC
的情况下单独使用每个子类中相同的方法重新实现来完成此任务?
如果ClassB
已经重新实施了我们想要忽略的方法,问题是否会有所不同?
答案 0 :(得分:1)
除非有一些特殊的机制在某种程度上允许你这样做,否则是不可能的。如果ClassB
有自己的重写实现,也没有区别。
由于已经编译了ClassB
和ClassC
,因此他们的方法的实现已经融入您的外部库。一般来说,除非你有自己的派生类,否则你无法在源代码级别做任何改变。
如果我们讨论的是带有运行时的托管语言,允许您动态修改调用目标,或者如果可以动态重写机器代码的热修补机制正在发挥作用,那么您可能还有一条出路 - - 但这将是一个特殊的例外,而不是规则。
答案 1 :(得分:0)
它取决于语言,它听起来像一个充其量的黑客。如果您是用Javascript编写的,可以直接修改B类和C类的原型函数。
在大多数C系列语言中,我认为这不可行。多重继承可能会导致含糊不清(我想B和C都有自己的子类),所以你可能不得不对每个子类进行子类化。