从类中重写方法以修改子项中的方法

时间:2013-03-17 21:10:54

标签: oop inheritance override subclass

ClassA有两个孩子:ClassBClassC

我们需要覆盖ClassA的方法,但我们将使用ClassBClassC(使用修改后的方法)。

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

是否可以在没有继承ClassBClassC的情况下单独使用每个子类中相同的方法重新实现来完成此任务?

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

2 个答案:

答案 0 :(得分:1)

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

由于已经编译了ClassBClassC,因此他们的方法的实现已经融入您的外部库。一般来说,除非你有自己的派生类,否则你无法在源代码级别做任何改变。

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

答案 1 :(得分:0)

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

在大多数C系列语言中,我认为这不可行。多重继承可能会导致含糊不清(我想B和C都有自己的子类),所以你可能不得不对每个子类进行子类化。