ClassA
有两个孩子:ClassB
和ClassC
。覆盖方法从类修改儿童的方法
我们需要重写ClassA
的方法,但我们将使用ClassB
和ClassC
(使用修改的方法)。
ClassA
,ClassB
和ClassC
都是我们无法修改的外部库的一部分。
是否有可能完成这项工作,而无需继承子类ClassB
和ClassC
分别在每个子类中使用相同的重新实现方法?
如果ClassB
已经重新实现了我们想忽略的方法,问题会不同吗?
ClassA
有两个孩子:ClassB
和ClassC
。覆盖方法从类修改儿童的方法
我们需要重写ClassA
的方法,但我们将使用ClassB
和ClassC
(使用修改的方法)。
ClassA
,ClassB
和ClassC
都是我们无法修改的外部库的一部分。
是否有可能完成这项工作,而无需继承子类ClassB
和ClassC
分别在每个子类中使用相同的重新实现方法?
如果ClassB
已经重新实现了我们想忽略的方法,问题会不同吗?
除非有某种特殊的机制可以让你做到这一点,否则这是不可能的。如果ClassB
有其自己的重写实现,这也没有区别。
由于ClassB
和ClassC
已被编译,其方法的实现已经被烘焙到您的外部库中。一般来说,除非您有自己的派生类,否则在源代码级别无法做任何更改。
如果我们谈论的是一种托管语言,其运行时允许您动态修改调用目标,或者即时重写机器代码的热补丁机制正在发挥作用,那么您可能有办法 - 但这将是一个特殊的例外,而不是规则。
它取决于语言,它听起来像一个最好的黑客。如果你用Javascript写这篇文章,你可以直接修改B类和C类的原型函数。
尽管在大多数C语言系列中,我认为这是不可能的。多重继承可能会导致歧义(我想B和C每个都有自己的子类),所以你可能不得不继承每个类。
这里有一个类似的问题,在特定的,有点相关的情况下,协议http://stackoverflow.com/questions/32798005 – Fattie 2015-09-26 14:24:22