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

类实现含相同方法签名但修饰符为default和static的两个接口时会怎样?

当类实现的两个接口分别有default和static的同名同签名方法时,会发生什么?

嘿,这个问题问得很到位!咱们先看你给出的代码示例:

interface A { 
    default void m1() {} 
} 
interface B{ 
    static void m1() {} 
} 
class C implements A,B { }

其实这种情况完全不会产生编译冲突,原因很简单:default方法和接口static方法的归属、调用逻辑完全是两回事:

  • 接口A的m1()是default实例方法,它会被实现类C继承下来,属于C的实例成员,你可以直接通过C的对象调用它:new C().m1();
  • 接口B的m1()是static方法,它只属于B接口本身,和实现类C没有继承关系,你只能通过B.m1()来调用,C的实例或者C类本身都没法直接访问这个方法。

Java编译器会把这两个方法当成完全独立的成员处理,所以你的代码可以正常编译运行。咱们可以写个测试代码验证一下:

public class Test {
    public static void main(String[] args) {
        C c = new C();
        c.m1(); // 这里调用的是接口A的default m1()
        B.m1(); // 这里调用的是接口B的static m1()
        // C.m1(); 这行代码会编译报错,因为C并没有继承B的static方法
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:12:00