接口是类型契约,只约定行为能力而不定义身份或内部结构;支持多实现、强制实现、可演进(如default方法),保障能力承诺的严肃性与扩展性。

接口作为类型契约,核心在于它不定义“你是谁”,只约定“你能做什么”。它像一份法律合同——双方签字即表示承诺履行条款,但合同本身不参与执行过程,也不规定签约方的内部结构。
契约不绑定身份,只约束行为
一个类实现接口,不是在声明“我属于某个家族”,而是在公开承诺“我保证提供这些能力”。比如 Runnable 接口不关心实现类是线程、任务调度器还是定时器,只要它能 run(),就满足契约。飞机、鸟类、无人机都能实现 Flyable,它们之间毫无继承关系,却共享同一行为承诺。
契约可叠加,且互不干扰
接口允许多实现,正因为它只描述能力维度。一个类可以同时是 Serializable(可序列化)、Comparable(可比较)、AutoCloseable(可自动关闭),这三种能力彼此独立,没有逻辑耦合。这种正交性让系统扩展更灵活——加新能力无需改动已有类结构,只需新增接口并实现即可。
契约必须显式兑现,不可绕过
接口方法默认是 public abstract,实现类必须提供具体实现(除非也是抽象类)。编译器强制检查,漏掉任何一个方法就会报错。这不同于抽象类中可选重写的方法,也不同于普通父类中可直接继承的行为。这种强制性保障了契约的严肃性:声明了支持某能力,就必须真正具备该能力。
契约可演进,但需兼顾兼容性
Java 8 引入 default 方法,是在不破坏现有实现的前提下为契约“补充说明”。比如在 Collection 接口中增加 stream() 默认实现,所有已存在的集合类自动获得该能力,无需修改代码。但这不改变契约本质——它仍是“你可以用这个功能”,而不是“你必须按某种方式构造自己”。static 方法则属于契约的配套工具,由接口自身提供,不面向实例。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











