Java接口支持多继承,即一个接口可通过extends关键字同时继承多个父接口,语法为逗号分隔;子接口继承所有父接口的抽象方法与常量,实现类须全部实现;同名常量需显式指定来源,同名默认方法要求实现类必须重写并明确调用路径。

Java 中接口之间用 extends 实现多继承,是指一个接口可以同时继承多个父接口,语法直接、语义清晰,是语言原生支持的特性。
接口多继承的基本写法
定义子接口时,在 extends 后列出多个父接口,用英文逗号分隔:
interface Animal extends Flyable, Swimmable, Walkable- 所有父接口中的抽象方法(包括常量)都会“合并”到
Animal中 - 后续实现该接口的类,必须提供全部抽象方法的具体实现
方法与常量的继承规则
多个父接口中若定义了同名常量(如 int SPEED = 10;),子接口不会自动覆盖或合并——它只是继承了这些成员;但当某个类实现该子接口时,若通过接口名访问常量(如 Flyable.SPEED),需显式指定来源,否则编译报错。
- 例如:若
Flyable和Swimmable都声明了int MAX_DEPTH = 100;,Animal接口本身不冲突,但实现类若写MAX_DEPTH就会歧义 - 解决方式:用
Flyable.MAX_DEPTH或Swimmable.MAX_DEPTH明确引用
默认方法冲突的处理
Java 8+ 允许接口定义 default 方法。如果多个父接口提供了同名同签名的默认方法,子接口不会自动选择其一,而是将冲突“传递”给实现类。
立即学习“Java免费学习笔记(深入)”;
- 子接口自身不能重写默认方法来消解冲突(除非显式提供新 default 实现)
- 最终实现类必须重写该方法,并可选择调用某一方:
Flyable.super.move()或Swimmable.super.move() - 这是编译期强制约束,确保行为明确
和类继承的本质区别
别把接口多继承和类的 implements 混为一谈:
-
interface X extends A, B是接口之间的能力叠加,用于构建更丰富的契约 -
class C implements X表示类承诺履行整个契约,包括所有源头方法 - 类本身仍只能
extends一个父类,但可通过实现一个“多继承来的接口”,一次性获得多种能力


















