Java通过接口实现行为多继承:类可实现多个接口以组合能力,接口可多继承形成能力聚合层,default方法冲突需显式重写,变量声明用接口类型实现解耦。

Java不支持类的多继承,但能通过接口实现行为上的多继承效果。核心在于把不同职责拆成独立接口,让类按需实现,从而组合能力、降低耦合。变量交互则依赖接口类型声明与多态,而非具体类引用。
用多个接口组合不同行为
接口代表“能力契约”,不是具体实现。一个类可同时实现多个接口,获得多种行为定义。
- 定义清晰、单一职责的接口,比如 Flyable(会飞)、Swimmable(会游)、Quackable(会叫)
- 类实现时用逗号分隔多个接口名:class Duck implements Flyable, Swimmable, Quackable
- 必须重写所有抽象方法;若漏掉一个,编译报错,或该类必须声明为 abstract
接口之间也能多继承(extends 多个)
接口可以继承其他接口,形成能力聚合层,便于统一管理和复用。
- 例如:interface WaterBird extends Flyable, Swimmable,表示“既会飞又会游”的鸟类能力集合
- 实现 WaterBird 的类,自动承担 Flyable 和 Swimmable 中所有抽象方法
- 适合构建领域语义明确的中间接口,比如 Playable + Saveable → GameEntity
处理默认方法冲突的关键操作
Java 8+ 允许接口含 default 方法,但多个接口提供同名 default 方法时,必须显式解决。
- 若类同时实现 InterfaceA 和 InterfaceB,两者都有 default void log(),则该类必须重写 log()
- 重写体内可选择调用某一方:A.super.log() 或 B.super.log(),也可自定义逻辑
- 子接口继承多个父接口且存在同名 default 方法时,也必须在子接口中 @Override default 显式覆盖,否则编译失败
用接口类型变量实现解耦交互
变量声明使用接口类型,而非具体类,是解耦的关键一步。它让调用方只依赖行为契约,不感知实现细节。
- 例如:Flyable bird = new Duck(); —— 后续只调用 bird.fly(),完全不知道背后是 Duck 还是 Airplane
- 方法参数也应面向接口:void launch(Flyable f) { f.fly(); },这样任意实现 Flyable 的对象都可传入
- 返回值同样适用:Swimmable getPet() { return new Duck(); },调用方只需关注 swim() 行为,无需关心构造过程










