2013-03-17 33 views
0

ClassA有两个孩子:ClassBClassC覆盖方法从类修改儿童的方法

我们需要重写ClassA的方法,但我们将使用ClassBClassC(使用修改的方法)。

ClassAClassBClassC都是我们无法修改的外部库的一部分。

是否有可能完成这项工作,而无需继承子类ClassBClassC分别在每个子类中使用相同的重新实现方法?

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

+0

这里有一个类似的问题,在特定的,有点相关的情况下,协议http://stackoverflow.com/questions/32798005 – Fattie 2015-09-26 14:24:22

回答

1

除非有某种特殊的机制可以让你做到这一点,否则这是不可能的。如果ClassB有其自己的重写实现,这也没有区别。

由于ClassBClassC已被编译,其方法的实现已经被烘焙到您的外部库中。一般来说,除非您有自己的派生类,否则在源代码级别无法做任何更改。

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

+0

令人失望,在我的具体情况下,这意味着复制粘贴约60行源代码:( – danjjl 2013-03-18 18:46:26

+0

A在iOS中有点相关的概念... http://stackoverflow.com/q/32798005/294884 – Fattie 2015-09-30 11:47:12

0

它取决于语言,它听起来像一个最好的黑客。如果你用Javascript写这篇文章,你可以直接修改B类和C类的原型函数。

尽管在大多数C语言系列中,我认为这是不可能的。多重继承可能会导致歧义(我想B和C每个都有自己的子类),所以你可能不得不继承每个类。