Java:如何在重写方法(祖父方法)中调用super()。super()
可能重复:
为什么是super.super.method(); Java不允许?
我有3个类,他们互相inheritance如下:
A ↳ B ↳ C
在每个类中,我有以下方法:
protected void foo() { ... }
在C
类中我想从A
类调用foo
而不在B
调用foo
:
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类是一个unit testing类,它有一些修改。 B
里面的foo
方法做了一些我们不想要的事情,所以我们在C
里面覆盖它。 但是, A
类中A
foo
很有用,需要调用。
- 要在超类中调用方法,可以使用
super.foo()
,而不是super().foo()
。super()
调用父类的构造函数。 - 没有办法调用
super.super.foo()
。 你可以在B类中添加对super.foo()
调用,这样在C中调用super.foo()
就会调用B中的super.foo()
,然后在A中调用foo()
。
这在Java中是不可能的。 您需要依赖B
为您提供访问A
的foo
的明确方式。