多态通过统一接口与差异化实现提升代码复用性,关键在于封装变化点至子类/实现类、稳定逻辑留于父类/接口;抽象类提供通用行为,接口定义行为契约,工厂模式消除条件分支,泛型结合多态增强工具类通用性。

多态本身不直接“写”出复用代码,而是通过统一接口+差异化实现的结构设计,让相同调用逻辑能适配多种类型,从而避免重复判断和冗余分支。真正提升复用性的关键,在于把变化点封装进子类或实现类,而把稳定逻辑留在父类或接口中。
用抽象类统一通用行为
当多个类共享部分属性和基础逻辑时,抽象类是比普通父类更合适的选择。它强制子类实现核心差异方法,同时提供可复用的公共能力。
- 比如图形系统中,Shape 抽象类定义
color、x、y属性和moveTo(int x, int y)方法,所有子类自动获得移动能力 - 子类只需重写
draw(),不用再写一遍坐标更新或颜色管理逻辑 - 新增
Triangle类时,只要继承Shape并实现draw(),就能无缝接入已有渲染流程
用接口解耦行为契约
接口更适合定义“能做什么”,而不是“是什么”。它让不同领域、不同层级的类,只要满足行为约定,就能被同一套处理逻辑使用。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 电商系统中定义 Discountable 接口,
Book、Electronics、Subscription各自实现calculateDiscount() - 结算服务只需接收
List<discountable></discountable>,遍历调用calculateDiscount(),无需 instanceof 判断类型 - 后续加个
Bundle商品组合类,只要实现该接口,结算逻辑完全不用改
用工厂+多态消除条件分支
传统写法常出现一长串 if-else 或 switch 来决定创建哪个对象、调用哪个方法。多态配合简单工厂,能把这些判断收拢、隔离、可扩展。
- 物流模块定义 ShippingStrategy 接口,
StandardShipping、ExpressShipping、OverseasShipping各自实现 - 工厂类根据订单类型返回对应策略实例,业务层只调用
strategy.calculateFreight(...) - 新增一种配送方式,只需新增一个实现类 + 注册到工厂,原业务代码零修改
用泛型+多态增强工具类通用性
工具方法如果只支持某一种类型,复用率就低;结合泛型约束和多态,能让同一个方法安全地处理多种实现。
- 比如排序工具:
<t extends comparable>> void sort(List<t> list)</t></t>—— 只要求 T 能比较,不管它是Product还是User - 又如校验工具:
<t extends validatable> boolean isValid(T obj)</t>,所有实现Validatable的类都能被统一校验 - 这种写法既保留类型安全,又避免为每种业务对象单独写一套工具方法
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










