Java接口支持多继承,用extends关键字后接英文逗号分隔的多个接口名;子接口合并所有父接口的抽象方法、default方法、static方法及常量;同名default方法须显式重写,同名常量需用接口名限定访问。

Java 中一个接口扩展多个其他接口,直接用 extends 关键字,后面跟多个接口名,用英文逗号分隔即可。这不是模拟或变通,而是语言原生支持的多继承机制。
语法写法:interface X extends A, B, C
这是最核心的写法。子接口会把所有父接口中声明的抽象方法、default 方法签名、static 方法签名以及 public static final 常量全部“合并”进来。
- 每个父接口的方法都成为子接口的成员,无需重复声明
- 子接口本身仍是纯接口,不能有构造器、实例字段或 private 成员
- 实现类只要实现这个子接口,就自动满足所有父接口的契约
同名 default 方法必须显式处理
如果多个父接口提供了同签名的 default 方法(比如都有 default void log() { ... }),子接口不能直接继承,否则编译失败。
- 子接口必须重写该方法,并给出明确实现
- 也可以在重写中选择调用某一方的默认实现,例如:
ParentA.super.log(); - 不处理就会报错:“class/interface inherits unrelated defaults for method xxx”
常量同名时需用接口名限定访问
若多个父接口定义了同名的 public static final 字段(如 int VERSION = 1;),子接口会继承所有,但使用时不能直接写 VERSION,否则编译报错。
立即学习“Java免费学习笔记(深入)”;
- 必须通过接口名显式指定,例如
InterfaceA.VERSION或InterfaceB.VERSION - 这避免了歧义,也体现了 Java 对命名冲突的严格管控
实际用途:组合行为契约,提升复用粒度
接口多继承不是为了炫技,而是为了解耦和组装能力。比如定义:
interface Flyable { void fly(); }interface Swimmable { void swim(); }interface Duck extends Flyable, Swimmable { void quack(); }
这样,任何实现 Duck 的类天然具备飞行、游泳、鸣叫三重能力,且各能力可被单独测试、单独复用。


















