【问题标题】:Override method from class to modify method in children重写类中的方法以修改子类中的方法
【发布时间】:2013-03-17 21:10:53
【问题描述】:

ClassA 有两个孩子:ClassBClassC

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

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

是否有可能在不使用每个子类中相同的方法重新实现的情况下分别对ClassBClassC 进行子类化?

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

【问题讨论】:

标签: oop inheritance overriding subclass


【解决方案1】:

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

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

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

【讨论】:

  • 令人失望,在我的特殊情况下,这意味着复制粘贴 ~60 行源代码:(
【解决方案2】:

这在某种程度上取决于语言,听起来充其量只是一个 hack。如果是用Javascript写的,可以直接修改B类和C类的原型函数。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 2013-03-14
    • 2012-06-15
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    相关资源
    最近更新 更多