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

时间:2012-08-13 14:02:49

标签: java

  

可能重复:
  Why is super.super.method(); not allowed in Java?

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

A
 ↳
   B
    ↳
     C

在每个课程中,我有以下方法:

protected void foo() {
    ...
}

内部课程C我想从foo课程致电A,而无需致电foo中的B

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非常有用,需要进行调用。

2 个答案:

答案 0 :(得分:17)

  • 要在超类中调用方法,请使用super.foo(),而不是super().foo()super()调用父类的构造函数。
  • 无法拨打super.super.foo()。您可以在B类中添加对super.foo()的调用,以便在C中调用super.foo(),将在B中调用super.foo(),然后在A中调用foo()

答案 1 :(得分:8)

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