Java通过接口实现多重继承语义,类可单继承但能implements多个接口,需按extends后implements顺序声明,必须实现所有抽象方法,同名方法只需一次实现,default方法冲突时须显式重写或调用。

Java 通过接口(interface)机制支持多重继承的语义,虽然类只能单继承(extends一个父类),但可以同时实现多个接口(implements多个接口),从而获得多种行为契约,有效弥补单继承的局限性。
用 implements 关键字声明多个接口
一个类在定义时,使用 implements 后跟逗号分隔的接口列表即可实现多个接口。注意:接口名之间用英文逗号分隔,且 implements 必须写在 extends 之后(如果同时存在继承和实现)。
- 正确写法:
class Dog extends Animal implements Runnable, Swimmable, Comparable<Dog> - 错误写法:
class Dog implements Runnable, Swimmable extends Animal(顺序错) - 接口本身可多继承(用
extends),比如interface FlyingAnimal extends Movable, Breathable
必须实现所有接口的抽象方法
实现多个接口时,该类必须提供每个接口中所有 default 以外的抽象方法的具体实现。若接口中有同名同签名的方法(如都定义了 void move()),只需实现一次,该实现同时满足所有接口要求。
- 若两个接口定义了相同方法(返回类型、参数列表一致),不冲突,直接实现即可
- 若方法签名相同但返回类型不同(协变返回除外),编译不通过——这属于设计矛盾,需重构接口
- Java 8+ 支持
default方法,未重写则自动继承默认行为;若多个接口提供了同名default方法,子类必须显式重写,否则编译报错
利用接口组合表达“能力”而非“身份”
多个接口应代表正交的、可复用的能力(如 Serializable、Cloneable、AutoCloseable),避免语义重叠或强耦合。这样既保持类职责清晰,又提升复用性和可测试性。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
- 例如:一个
Drone类可同时实现Flyable、RemoteControllable、Loggable,每种能力独立演化 - 优先用接口定义行为契约,用抽象类共享状态和通用逻辑
- 配合标记接口(如
MarkerInterface)或函数式接口(如Predicate<T>)灵活扩展
注意默认方法冲突与解决策略
当多个接口提供同名 default 方法时,Java 要求实现类必须明确选择或重写,这是为了避免“钻石问题”的歧义。
- 编译器会提示:“class inherits unrelated defaults for method … from types A and B”
- 解决方案:在实现类中用
A.super.method()或B.super.method()显式调用某一方的默认实现,或完全重写 - 实践中建议尽量减少接口间 default 方法的重复定义,必要时提取公共父接口统一提供
不复杂但容易忽略的是:接口不是类,它不保存状态,只约定行为;真正让“多实现”发挥价值的,是围绕业务能力合理拆分接口,并坚持面向接口编程——变量声明、参数类型、返回类型优先使用接口而非具体类。

















