包含同名super.method()的重载方法

时间:2012-02-21 17:34:21

标签: java oop

在有人说这是一个骗局之前,我查看了关于super.super.method()的其他答案,但这个问题的答案并不存在。

我使用的库可以在多个级别重载方法:

class Level0 {
     public void sameName() {}
}

class Level1 extends Level0 {
     public void sameName() {
          someActions();
          super.sameName();
     }
}

class Level2 extends Level1 {
     public void sameName() {
          someOtherActions();
          super.sameName();
     }
}

假设我正在编写Level3类,我想在Level2中修改方法sameName()。但是,Level0,Level1和Level2中的代码被冻结,我无法更改它。 处理这种情况时,最佳做法(或至少是理智的做法)是什么?

自然的方式是调用super.super.sameName()但是由于显而易见的原因,Java不允许这样做。我是否坚持使用副本Level2并在那里进行修改?如果我必须修改Level1中的sameName(),该怎么办?

1 个答案:

答案 0 :(得分:3)

您可以在Level3 - someOtherOtherActions()然后super.sameName()中执行相同的操作。如果你真的想修改Level2的行为而不是扩展它 - 你没有其他选择。这是一件好事 - 每个类都定义了它的方法,并且不允许其他人修改它们(只是为了覆盖它们)。

您可以查找可以修改方法行为的插件,但这取决于特定的代码。例如,如果someOtherActions()受到保护,您可以使用不调用super.someOtherActions()的空白实现覆盖它。