是否可以调用superinterface的默认方法?

时间:2014-04-07 13:23:00

标签: java interface super default-method

假设我有两个课程AB

class A
{
    void method()
    {
        System.out.println("a.method");
    }
}
class B extends A
{
    @Override
    void method()
    {
        System.out.println("b.method");
    }
}

B实例化为b后,我可以调用B的{​​{1}}方法。我还可以使用b.method()制作B方法调用A的方法。但是,如果super.method()是一个接口,该怎么办?

A
interface A
{
    default void method()
    {
        System.out.println("a.method");
    }
}

有什么方法可以让class B implements A { @Override void method() { System.out.println("b.method"); } } 方法调用B的方法?

1 个答案:

答案 0 :(得分:2)

是的,你可以。使用

A.super.method();

JLS

  

如果表单为 TypeName . super . [TypeArguments] Identifier ,则:

     

如果TypeName既不表示类也不表示接口,则为编译时错误。

     

如果TypeName表示一个类C,则要搜索的类是C的超类。

     

如果C不是词法封闭类型,则是编译时错误   声明当前类,或者如果C是类Object。

     

T成为立即封闭方法的类型声明   调用。如果T是类Object,那么这是一个编译时错误。

     

否则,TypeName表示要搜索的界面I