java多态通过“统一调用、各自实现”支持接口和继承两种方式:接口适用于无继承关系的类(如button、image均实现drawable),继承适用于有层级关系的类(如circle、rectangle继承shape);引用类型决定可用方法,运行时绑定具体实现,新增子类或实现类无需修改原有调用代码。

Java 中多态处理不同类的相同操作,核心在于“统一调用、各自实现”——用一个接口或父类类型接收多种对象,调用同一个方法名,实际执行的是每个类自己定义的逻辑。
用接口统一行为契约
当多个类没有继承关系但需要共享同一操作(比如 draw()、showSpecifications()),定义接口是最自然的选择。它不关心“是谁”,只约定“能做什么”。
- 声明接口,如
interface Drawable { void draw(); } - 让无关类(
Button、Image、Text)各自implements Drawable并实现draw() - 集合可存为
List<drawable></drawable>,遍历时直接调用d.draw(),无需 if-else 判断类型
用继承+重写实现同类体系的多态
适用于有明显层级关系的类,比如图形、员工、动物等。父类提供通用方法签名,子类按需定制实现。
- 定义父类(或抽象类)
Shape,含double calculateArea()(可为 abstract 或带默认实现) -
Circle和Rectangle继承Shape,分别重写calculateArea() - 代码中用
Shape s = new Circle(3);,调用s.calculateArea()自动走圆的逻辑
注意多态的边界和常见误区
多态不是万能的,它的能力由引用类型决定,运行时才绑定具体实现,但编译期就限制了可用操作。
- 父类/接口引用只能调用其声明的方法,不能访问子类独有的字段或方法
- 静态方法、构造器、
private方法不参与多态;final方法无法被重写 - 避免强行向下转型(
(Circle)s),除非已用instanceof安全校验 - 优先面向接口编程(
List<drawable></drawable>而非List<object></object>),提升扩展性
实际效果:新增类型不改旧代码
这是多态最实用的价值。比如员工系统已有 FullTimeEmployee 和 PartTimeEmployee,都实现了 computeSalary();新增 Contractor 类只需实现同一接口或继承同一父类,原有遍历 List<employee></employee> 并调用 e.computeSalary() 的代码完全不用动。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











