I have 3 classes they inherit from each other as follows:
A
↳
B
↳
C
Inside each class I have the following method:
protected void foo() {
...
}
Inside class C I want to call foo from class A without calling foo in 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();
}
EDIT
Some Context Info:
Class B is an actual class we use. Class C is a unit test class, it has some modifications. foo method inside B does some things we don't want so we override it inside C. However foo in class A is useful and needs to be called.
解决方案
To call a method in a super class, you use super.foo(), not super().foo(). super() calls the constructor of the parent class.
There is no way to call super.super.foo(). You can add a call to super.foo() in class B, so that calling super.foo() in C, will call super.foo() in B which in turn will call foo() in A.