java接口天然支持多继承,一个接口可使用extends同时继承多个父接口,类则可通过implements实现多个接口;java 8+默认方法冲突时需在实现类中显式处理,因接口无状态,可避免类多继承的菱形问题。

Java 接口本身不叫“实现”多继承,而是**天然支持多继承**——这是接口的设计特性,和类的单继承有本质区别。
接口可以多继承:一个接口继承多个父接口
接口用 extends 关键字继承其他接口,且支持同时继承多个,用逗号分隔:
- 语法合法:
interface C extends A, B - 接口 C 会合并 A 和 B 中所有抽象方法(以及默认方法、静态方法)
- 任何实现 C 的类,必须提供
methodA()、methodB()、methodC()的具体实现
类可以多实现:一个类实现多个接口
类不能多继承,但可以通过 implements 同时实现多个接口:
- 语法要求:先
extends(可选),再implements,顺序不可颠倒 - 例如:
class Duck extends Animal implements Flyable, Swimmable - 该类既要满足父类
Animal的约束,也要完整实现两个接口的所有抽象方法
Java 8+ 默认方法带来的冲突与解决
当多个接口提供同名默认方法时,编译器会报错,必须在实现类中显式处理:
- 选择调用某一方:
InterfaceA.super.method() - 或完全重写,提供新逻辑
- 子接口若继承了冲突的父接口,默认也需重写该方法来明确行为
为什么这样设计?避免菱形问题
类多继承容易引发二义性(比如两个父类都有 run(),子类该继承谁的?),而接口只定义契约,不携带状态,即使多个接口声明相同方法,实现类只需提供一个版本即可,天然规避歧义。多继承在接口层是安全、轻量、面向行为的扩展机制。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











