Java:如何在重写方法(祖父方法)中调用super()。super()

Java: How to call super().super() in overridden method (grandparent method)

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Why is super.super.method(); not allowed in Java?

我有3个类,它们互相继承,如下所示:

1
2
3
4
5
A
 ?
   B
    ?
     C

在每个类中,我都有以下方法:

1
2
3
protected void foo() {
    ...
}

C类中,我想从A类中调用foo,而不调用B中的foo

1
2
3
4
5
protected void foo() {
    // This doesn't work, I get the following compile time error:
    // Constructor call must be the first statement in a constructor
    super().super().foo();
}

编辑一些上下文信息:B类是我们使用的实际类。C类是一个单元测试类,它有一些修改。B中的foo方法做了一些我们不想做的事情,所以我们在C中重写它。然而,类A中的foo是有用的,需要调用。


  • 要在超级类中调用方法,可以使用super.foo(),而不是super().foo()super()调用父类的构造函数。
  • 没有办法打电话给super.super.foo()。您可以在B类中增加一个对super.foo()的调用,这样在C中调用super.foo()会在B中调用super.foo(),而在A中调用foo()

在Java中是不可能的。你需要依靠B为你提供一种明确的方式来访问Afoo