java类不支持多重继承,但可通过接口多实现、mixin风格接口、组合模式及接口默认方法协同四种方式实现类似效果。

Java 类本身不能多重继承,但有几种成熟、安全的变通方式来获得类似效果。核心思路是区分“是什么”和“能做什么”,用不同机制承担不同职责。
用接口实现行为级多继承
这是最常用、最推荐的方式。一个类可以 implements 多个接口,每个接口定义一组能力契约。
- 接口之间可互相继承(extends 多个父接口),形成能力组合树
- 类实现多个接口时,必须提供所有抽象方法的具体实现
- 从 Java 8 起,接口可含 default 方法,提供可复用的行为逻辑
- 若多个接口有同名 default 方法,类必须显式重写该方法,消除歧义
用 MixIn 风格组织接口(尤其适合功能模块化)
借鉴 Python 的 MixIn 思想,把通用能力封装为命名清晰的接口,不表达主体身份,只表达附加能力。
- 例如:RunnableMixIn、FlyableMixIn、SerializableMixIn
- 主线继承链保持单一(如 Dog → Mammal → Animal)
- 能力通过 implements RunnableMixIn, FlyableMixIn 混入,避免继承爆炸
- 语义明确:不是“狗是一种会跑的东西”,而是“狗具备跑的能力”
用组合替代继承获取状态与行为
当需要共享字段、私有逻辑或运行时可替换行为时,组合比继承更灵活、更安全。
- 将能力封装为独立类(如 FlyBehavior、SwimBehavior)
- 主类持有这些对象的引用(private FlyBehavior flyBehavior)
- 通过委托调用(flyBehavior.fly())暴露能力
- 支持运行时切换策略(比如让鸭子临时换上火箭推进器),继承做不到这点
接口继承 + 默认方法协同使用
接口不仅能声明方法,还能提供默认实现,让能力复用更进一步。
- 定义基础能力接口:interface Loggable { default void log(String msg) { System.out.println(msg); } }
- 定义扩展能力接口:interface Auditable extends Loggable { default void audit() { log("audit triggered"); } }
- 类实现 Auditable 后,自动获得 log 和 audit 两个方法
- 既保持接口解耦,又减少重复代码











