接口聚焦单一职责,规范可变行为,支持多态与松耦合,通过default和static方法增强灵活性,实现类决定具体行为,提升系统扩展性与维护性。

接口在Java中不是具体的功能实现者,而是行为的规范。它定义了一组方法签名,不包含具体实现(Java 8之前),让实现类去决定如何完成这些行为。理解接口的设计原则,关键在于把握“解耦”“扩展性”和“多态”的核心思想。
1. 接口应聚焦单一职责
一个接口只应描述一类行为。比如,Comparable 接口只定义对象比较规则,Runnable 只定义任务执行方式。这样做能让实现类更清晰,避免“大而全”的接口导致不必要的实现负担。
- 避免在一个接口中混合无关的方法,如把“启动引擎”和“发送邮件”放在同一个接口
- 细粒度接口更容易被复用和测试
2. 接口用于定义可变行为的标准
当多个类需要以不同方式实现相同动作时,接口提供统一调用入口。例如,不同支付方式(支付宝、微信、银行卡)都可以实现 PaymentStrategy 接口中的 pay() 方法。
- 调用方只需面向接口编程,无需关心具体实现
- 新增支付方式时,不影响原有代码,符合开闭原则
3. 利用接口实现多态与松耦合
通过接口引用指向具体实现对象,程序可以在运行时决定使用哪种行为。这种机制是多态的基础。
立即学习“Java免费学习笔记(深入)”;
示例:
PaymentStrategy ps = new Alipay(); ps.pay(100); // 实际调用 Alipay 的 pay 方法
- 业务逻辑依赖抽象,而不是具体类
- 便于替换实现,提升系统灵活性
4. 合理使用默认方法与静态方法(Java 8+)
Java 8 允许在接口中定义 default 和 static 方法,为接口提供默认实现,减少实现类的重复代码。
- default 方法可用于向后兼容,添加新方法而不破坏旧实现
- static 方法用于工具性质的操作,如工厂方法或通用计算
注意:不要滥用默认方法来替代抽象类,接口仍应以行为契约为主。
基本上就这些。接口的本质是“能做什么”,而不是“怎么去做”。设计良好的接口,能让系统更易维护、扩展和测试。掌握这一点,Java 面向接口编程的核心就算真正入门了。不复杂但容易忽略。










