20

可能重复:
为什么是 super.super.method(); 在 Java 中不允许?

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

A
 ↳
   B
    ↳
     C

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

protected void foo() {
    ...
}

在课堂内C我想foo从课堂上打电话A而不打电话:fooB

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类是一个单元测试类,它有一些修改。foo里面的方法B做了一些我们不想要的事情,所以我们在里面覆盖它C。但是foo在课堂A上很有用,需要调用。

4

2 回答 2

21
  • 要调用超类中的方法,请使用super.foo(),而不是super().foo()super()调用父类的构造函数。
  • 没有办法打电话super.super.foo()。您可以super.foo()在 B 类中添加一个调用,这样super.foo()在 C 中的调用将在 B 中调用super.foo(),而在 B 中又将foo()在 A中调用。
于 2012-08-13T14:07:13.463 回答
13

这在 Java 中是不可能的。您需要依靠B为您提供访问A's的显式方式foo

于 2012-08-13T14:07:03.150 回答