请考虑以下事项:
//Fooable.java
public interface Fooable {
public default void foo() {
System.out.println("Fooable::foo");
}
//Lots of other non-default methods...
}
//MyFooable.java
public class MyFooable implements Fooable {
@Override
public void foo() {
System.out.println("MyFooable::foo");
}
//implements other methods in Fooable...
}
//MyAdvancedFooable.java
public class MyAdvancedFooable extends MyFooable {
@Override
public void foo() {
Fooable.super.foo();
System.out.println("MyAdvancedFooable::foo");
}
public static void main(String[] args) {
new MyAdvancedFooable().foo();
}
}
如您所见,我想从foo()
(Fooable
的子类)MyAdvancedFooable
中致电MyFooable
。但是,当我尝试编译时,我收到以下错误:
MyAdvancedFooable.java:4:错误:不是封闭类:Fooable Fooable.super.foo();
如果我尝试MyAdvancedFooable extends MyFooable implements Fooable
,我会收到以下信息:
MyAdvancedFooable.java:4:错误:错误的类型限定符默认超级调用中的Fooable Fooable.super.foo(); 方法foo()在MyFooable
中被覆盖如何在不创建Fooable的新匿名实现的情况下解决此问题?
答案 0 :(得分:2)
您只能调高一级方法,因此您需要
Fooable.super.foo();
MyFooable
中的,只需在super.foo()
MyAdvancedFooable
答案 1 :(得分:0)
您只需使用super.foo()
或this.super.foo()
,因为它是对象的父级而不是Fooable.super.foo()
隐含的类。