在有人说这是一个骗局之前,我查看了关于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(),该怎么办?
答案 0 :(得分:3)
您可以在Level3
- someOtherOtherActions()
然后super.sameName()
中执行相同的操作。如果你真的想修改Level2
的行为而不是扩展它 - 你没有其他选择。这是一件好事 - 每个类都定义了它的方法,并且不允许其他人修改它们(只是为了覆盖它们)。
您可以查找可以修改方法行为的插件,但这取决于特定的代码。例如,如果someOtherActions()
受到保护,您可以使用不调用super.someOtherActions()
的空白实现覆盖它。