接口编程通过定义行为契约提升灵活性与可维护性:用接口变量引用不同实现类对象,运行时动态调用;接口仅声明方法签名、不保存状态;支持多态扩展与多接口组合,避免继承耦合。

接口编程是一种通过定义行为契约而非具体实现来组织代码的设计方式,它让程序更灵活、可维护性更强。核心在于:用接口变量引用不同实现类的对象,运行时决定调用哪个具体方法。
接口是行为的抽象,不是数据的容器
接口只声明方法签名(如 void start()、int getSpeed()),不保存状态,也不提供字段初始化。它回答的是“能做什么”,而不是“是什么”或“有多少”。比如 Runnable 接口只规定 run() 方法,不管线程怎么启动、资源如何分配。
用接口类型声明变量,指向具体实现
这是接口编程最典型的写法:
-
List
names = new ArrayList(); —— 左边是接口,右边是实现类 - Animal pet = new Dog(); —— 假设 Dog 实现了 Animal 接口
- 调用 pet.speak() 时,实际执行的是 Dog 类里的逻辑,但编译期只认 Animal 定义的行为
多态让扩展不改原有代码
新增一种动物,比如 Cat,只要它实现 Animal 接口,就能直接传给原本只认 Animal 的方法:
- 原来的方法参数是 public void feed(Animal a)
- 现在传入 new Cat() 或 new Bird() 都合法
- 无需修改 feed 方法,也不用加 if-else 判断类型
接口组合比继承更轻量
一个类可以实现多个接口,表达“具备多种能力”:
- class Drone implements Flyable, CameraControl, Autonomous
- 每个接口聚焦单一职责,比继承深、耦合重的类体系更易测试和复用
- 避免“父类污染”——比如为了继承 Flyable 被迫带上无关的字段或方法











