我有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
非常有用,需要进行调用。
答案 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
的明确方式。