ClassA
有两个孩子: ClassB
和ClassC
。
我们需要重写一个方法,ClassA
但我们将使用ClassB
and ClassC
(使用修改后的方法)。
ClassA
,ClassB
并且ClassC
都是我们无法修改的外部库的一部分。
是否可以在没有子类化的情况下完成这项工作,ClassB
并ClassC
在每个子类中单独使用相同的方法重新实现?
如果ClassB
已经重新实现了我们想要忽略的方法,问题会有所不同吗?
ClassA
有两个孩子: ClassB
和ClassC
。
我们需要重写一个方法,ClassA
但我们将使用ClassB
and ClassC
(使用修改后的方法)。
ClassA
,ClassB
并且ClassC
都是我们无法修改的外部库的一部分。
是否可以在没有子类化的情况下完成这项工作,ClassB
并ClassC
在每个子类中单独使用相同的方法重新实现?
如果ClassB
已经重新实现了我们想要忽略的方法,问题会有所不同吗?
除非有某种特殊的机制允许你这样做,否则这是不可能的。如果ClassB
有自己的重写实现也没有什么区别。
因为ClassB
并且ClassC
已经被编译,他们的方法的实现已经被烘焙到你的外部库中。一般来说,除非您有自己的派生类,否则您无法在源代码级别更改此设置。
如果我们谈论的是具有运行时允许您动态修改调用目标的托管语言,或者如果可以动态重写机器代码的热补丁机制正在发挥作用,那么您可能有出路——但是将是一个特殊的例外,而不是规则。
它有点取决于语言,听起来充其量只是一个黑客。如果你是用Javascript写这个,你可以直接修改B类和C类的原型函数。
不过,在大多数 C 系列语言中,我认为这是不可能的。多重继承可能会导致歧义(我想 B 和 C 都有自己的子类),因此您可能必须对每个子类进行子类化。