从实现类访问重写的默认方法

在课堂上,super.foo() 只会查看超类。如果要从超级接口调用默认实现,则需要使用接口名称 Fooable.super.foo() 限定 super

public interface Fooable {
    default int foo() {return 3;}
}

public class A extends Object implements Fooable {
    @Override
    public int foo() {
        //return super.foo() + 1; //error: no method foo() in java.lang.Object
        return Fooable.super.foo() + 1; //okay, returns 4
    }
}