接口多态使无关类通过实现同一接口获得统一行为能力,核心是“只约定行为,不关心身份”;如Drawable接口让Button、Image、Text等不同类均可被render()统一调用,新增SVGIcon只需实现接口,无需修改原有代码。

Java 接口多态能让不相关的类具备统一动作,核心在于“只约定行为,不关心身份”。接口定义了一组方法签名,任何类只要实现它,就承诺提供这些方法的具体逻辑——哪怕它们在现实世界中毫无继承关系,也能通过同一接口类型被统一调用。
接口作为行为契约,剥离类的血缘关系
接口不描述“是什么”,只声明“能做什么”。比如 Drawable 接口只规定 draw() 方法,而 Button、Image、Text 这三者在业务模型中完全无关:按钮是交互控件,图像是资源对象,文本是内容载体。但只要它们都 implements Drawable,就自动获得“可绘制”这一共同能力。
用接口类型接收任意实现类
方法参数、变量声明、集合元素类型都可以直接使用接口,屏蔽具体实现细节:
- 方法入参写
public void render(Drawable d),传入new Button()或new Image()都合法 - 集合可声明为
List<drawable> list = new ArrayList();</drawable>,往里加不同类的对象不会报错 - 遍历时只需
for (Drawable d : list) { d.draw(); },无需if (d instanceof Button)判断
新增类不改旧代码,扩展零成本
当需要支持新类型(比如加入 SVGIcon)时,只需让它实现 Drawable 并重写 draw()。原有渲染逻辑、集合操作、工厂方法等全部保持不变——因为所有调用都面向接口,不依赖具体类名。
立即学习“Java免费学习笔记(深入)”;
注意边界:接口不提供状态和复用逻辑
接口不能有实例字段,也不含方法体(默认/静态方法除外),所以它只解决“统一调用入口”的问题,不负责共享数据或通用实现。如果多个实现类有共性逻辑(比如日志记录、参数校验),可配合模板方法模式或工具类补充,但不影响接口多态本身的有效性。


















