多态在图形学和游戏开发中核心作用是统一绘制逻辑、避免类型判断、提升扩展性与可维护性;通过shape接口定义draw方法,各图形类实现并封装细节,集合批量调用,结合graphics2d增强渲染,配合工厂模式实现动态创建。

多态在图形学和游戏开发中,核心作用是让不同图形类型能用同一套调用逻辑完成绘制,避免大量 if-else 或 switch 判断具体类型,提升扩展性与可维护性。
用接口或抽象类定义统一行为
所有图形(如 Circle、Rectangle、Triangle)都应实现同一个绘图契约。推荐使用接口 Shape:
- 定义 Shape 接口,只声明
void draw(Graphics g)方法 - 每个具体图形类(Circle、Rectangle 等)实现该接口,并在
draw()中调用g.drawOval()、g.drawRect()等原生绘图方法 - 不依赖具体类名,也不暴露坐标、颜色等细节给上层调用者——这些由各子类自行封装和管理
用集合统一持有并批量绘制
把不同图形对象存入统一容器,运行时自动调用各自实现的 draw 方法:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 声明
List<shape> shapes = new ArrayList();</shape> - 添加对象:
shapes.add(new Circle(100, 100, 50));、shapes.add(new Rectangle(200, 150, 80, 40)); - 重绘时遍历:
for (Shape s : shapes) { s.draw(g); }—— JVM 自动绑定到 Circle.draw() 或 Rectangle.draw() - 新增图形(如 Polygon)只需实现 Shape 接口,无需修改已有绘制循环代码
结合 Graphics2D 提升绘制能力
Graphics 对象本身功能有限,而 Graphics2D 支持抗锯齿、变换、渐变等高级效果。可在各图形的 draw 方法中安全转型:
- 在
Circle.draw(Graphics g)内部写:Graphics2D g2d = (Graphics2D) g; - 启用抗锯齿:
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - 设置描边粗细:
g2d.setStroke(new BasicStroke(2.5f)); - 这样每个图形可自主控制渲染质量,不影响其他图形的绘制逻辑
配合工厂模式动态创建图形
用户点击“画圆”按钮时,不硬编码 new Circle(...),而是交由工厂返回 Shape 实例:
- 定义 ShapeFactory 类,提供静态方法:
public static Shape create(String type, int... params) - 内部根据 type 返回对应图形对象,例如
if ("circle".equals(type)) return new Circle(params[0], params[1], params[2]); - 主程序只需写:
shapes.add(ShapeFactory.create("circle", x, y, r)); - 后续增加新图形类型(如 Star),只需扩展工厂,不改动 UI 或绘制主逻辑
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










