【问题标题】:Is calling a superinterface's default method possible? [duplicate]是否可以调用超接口的默认方法? [复制]
【发布时间】:2014-05-19 18:38:26
【问题描述】:

假设我有两个班级,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.method() 一样调用B 的方法。我也可以用super.method() 使B 的方法调用A 的方法。但是如果A 是一个接口呢:

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

有什么办法可以让B的方法调用A的方法吗?

【问题讨论】:

    标签: java interface super default-method


    【解决方案1】:

    是的,你可以。使用

    A.super.method();
    

    JLS 状态

    如果表单是TypeName . super . [TypeArguments] Identifier,那么:

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

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

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

    T 成为立即包含方法的类型声明 调用。如果T 是 Object 类,则会出现编译时错误。

    否则TypeName表示要搜索的接口,I

    【讨论】:

      猜你喜欢
      • 2014-08-08
      • 1970-01-01
      • 2015-08-20
      • 1970-01-01
      • 2017-10-12
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 2020-01-27
      相关资源
      最近更新 更多