You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中继承抽象类并实现接口后,如何调用两者的同名方法?

问题分析与解决

在Java中,当类继承抽象类同时实现接口且两者存在同名方法时,调用规则有明确区分:

  • 对于接口的默认方法,因一个类可实现多个接口,可能存在多个同名默认方法,需用接口名.super.方法名()明确指定调用哪个接口的实现。
  • 对于继承的父类(包括抽象类),由于Java是单继承机制,不存在调用歧义,直接使用super.方法名()即可调用父类方法,不需要加父类的类名前缀。

你代码里的A.super.m1()是错误语法,Java不支持通过父类名.super这种方式调用父类方法,这就是报错"not an enclosing class: A"的原因。

修正后的代码

interface C {
  default void m1(){
      System.out.println("C");
  }
}

abstract class A{
  abstract void display();
  void m1(){
      System.out.println("A");
  }
}

class B extends A implements C{
    public void m1(){
    }
    void display() {
        C.super.m1(); // 调用接口C的默认方法
        super.m1();   // 调用父类A的m1方法
    }
}

public class Main {
  public static void main(String[] args) {
    A obj = new B();
    obj.display();
  }
}

运行后会依次输出:

C
A

内容的提问来源于stack exchange,提问作者Tejas Nakhate

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:30:00