关键在于多个类实现同一接口并各自重写方法,通过接口引用指向具体对象,JVM运行时根据实际类型动态调用对应实现,从而输出不同行为;接口定义“做什么”,实现类决定“怎么做”。

Java 中实现“同一接口的不同行为输出”,关键在于让多个类实现同一个接口,各自提供独立的方法实现,再通过接口类型变量统一调用。运行时 JVM 会根据实际对象类型自动执行对应类里的方法,从而输出不同结果。
接口定义与多类实现
先定义一个接口,声明公共行为(比如 draw() 或 makeSound()),不写具体逻辑;然后让不同类(如 Circle、Rectangle、Dog、Cat)分别 implements 该接口,并在各自类中写出不同的方法体。
- 接口只管“做什么”,不管“怎么做”
- 每个实现类决定自己的行为细节,比如 Dog 的 makeSound() 输出 "Woof!",Cat 的输出 "Meow!"
- 编译时只知道是接口类型,运行时才确定调用哪个类的版本
用接口引用指向具体对象
声明变量时使用接口类型,但 new 的是具体实现类的对象。这样就完成了“向上转型”,为多态调用打下基础。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- Drawable d1 = new Circle();
- Drawable d2 = new Rectangle();
- d1.draw(); // 输出圆形绘制逻辑
- d2.draw(); // 输出矩形绘制逻辑
把接口作为参数或返回值使用
方法接收接口类型参数,就能接受任意实现类对象;或者方法返回接口类型,实际返回某个实现类实例。这进一步扩大了多态的适用范围。
立即学习“Java免费学习笔记(深入)”;
- 定义 void render(Drawable shape),传入 Circle 或 Triangle 都可以
- 定义 Drawable createShape(String type),根据 type 返回不同实现类对象
- 集合也能用,比如 List<Drawable> shapes = new ArrayList<>(); 可混存多种图形
注意运行时绑定和限制
接口变量只能访问接口中声明的方法,不能调用实现类独有的方法。如果确实需要,得用 instanceof 判断后向下转型,但应尽量避免——这是设计上松耦合被破坏的信号。
- 多态输出差异,靠的是 JVM 在运行时查对象的实际类,再找对应方法字节码
- 编译阶段只检查接口有没有这个方法,不关心具体是谁实现的
- 只要没重写接口默认方法或静态方法,就不会出现意外行为

















