0

ClassA有两个孩子: ClassBClassC

我们需要重写一个方法,ClassA但我们将使用ClassBand ClassC(使用修改后的方法)。

ClassAClassB并且ClassC都是我们无法修改的外部库的一部分。

是否可以在没有子类化的情况下完成这项工作,ClassBClassC在每个子类中单独使用相同的方法重新实现?

如果ClassB已经重新实现了我们想要忽略的方法,问题会有所不同吗?

4

2 回答 2

1

除非有某种特殊的机制允许你这样做,否则这是不可能的。如果ClassB有自己的重写实现也没有什么区别。

因为ClassB并且ClassC已经被编译,他们的方法的实现已经被烘焙到你的外部库中。一般来说,除非您有自己的派生类,否则您无法在源代码级别更改此设置。

如果我们谈论的是具有运行时允许您动态修改调用目标的托管语言,或者如果可以动态重写机器代码的热补丁机制正在发挥作用,那么您可能有出路——但是将是一个特殊的例外,而不是规则。

于 2013-03-17T21:18:24.603 回答
0

它有点取决于语言,听起来充其量只是一个黑客。如果你是用Javascript写这个,你可以直接修改B类和C类的原型函数。

不过,在大多数 C 系列语言中,我认为这是不可能的。多重继承可能会导致歧义(我想 B 和 C 都有自己的子类),因此您可能必须对每个子类进行子类化。

于 2013-03-17T21:26:26.073 回答