You need to enable JavaScript to run this app. 为什么无法使用super关键字调用父接口的default方法
优惠活动
大模型
产品
解决方案
定价
更多

为什么无法使用super关键字调用父接口的default方法

Java接口default方法调用编译错误原因说明

错误触发原因

你代码里报错的核心原因是super关键字的指向规则不符合预期:

  • Java中无前缀的super默认指代当前类的直接父类,你当前的WithDefinitionsImpl没有显式继承其他类,super指向的是java.lang.Object,而Object类中没有definedMeth()方法,所以触发编译错误。
  • 额外的语法设计原因:Java允许一个类实现多个接口,多个接口可能存在同名的default方法,直接使用super.方法名()的写法会让编译器无法定位你要调用的是哪个接口的默认实现,因此语法层面本身就不允许用这种方式调用接口的default方法。

修正方案

调用指定接口的default方法需要使用接口名.super.方法名()的显式指定写法,你只需要修改报错行的代码即可:

interface WithDefinitionsInter {
    default void definedMeth() {
        System.out.println("inside interface");
    }
}
class WithDefinitionsImpl implements WithDefinitionsInter {
    public void definedMeth() {
        WithDefinitionsInter.super.definedMeth(); // 修正后无编译错误
        System.out.println("inside class");
    }
}
public class QuizDef {
    public static void main(String par[]) {
        WithDefinitionsInter withDef = new WithDefinitionsImpl();
        withDef.definedMeth();
    }
}

修改后代码运行输出为:

inside interface
inside class

内容的提问来源于stack exchange,提问作者Manish Bansal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 08:18:03