重载解决同一类中多种调用方式复用,重写解决父子类间行为定制化复用;重载通过参数差异提供统一方法名,重写通过子类实现替换父类逻辑,二者分层协作可提升代码复用性与可维护性。

方法重载(Overload)和重写(Override)是 Java 中提升代码复用率的两个核心机制,但作用层级不同:重载解决“同一类中多种调用方式”的复用问题,重写解决“父子类间行为定制化复用”的问题。合理搭配使用,能显著减少重复逻辑、增强可维护性。
用重载统一入口,适配多类型/多场景
在同一个类中,通过参数个数、类型或顺序的不同定义多个同名方法,让调用方只需记住一个方法名,就能处理不同输入——避免为相似功能起一堆名字(如 addInt、addDouble、addString),也避免手动类型转换或包装。
- 数值计算:对 int、double、BigInteger 分别提供 sum(),内部各自做最合适的加法逻辑
- 对象构造:如 User 类提供无参、仅姓名、姓名+年龄三种构造方法,让使用者按需初始化,不强制传入默认值
- 日志记录:log(String)、log(String, Exception)、log(String, int level) 共存,调用时自动匹配最贴切的版本
用重写继承并优化父类行为
子类通过重写父类方法,在复用已有结构和调用链的前提下,替换具体实现。这样既保留了统一接口(比如所有图形都有 draw()),又允许每个子类用最适合自己的方式执行(圆画弧线、矩形画四边)。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 避免在每个子类里重新写一整套绘图流程,只改关键步骤
- 父类可封装通用校验、日志、事务等模板逻辑,子类只专注业务差异点
- 配合 @Override 注解,明确表达“我是在扩展而非新建”,提升可读性和编译期检查
组合使用:重载 + 重写协同增效
重载发生在编译期,重写发生在运行期,二者可分层协作。例如设计一个通用数据处理器:
立即学习“Java免费学习笔记(深入)”;
- 父类 DataProcessor 提供 process(Object) 作为统一入口(重载候选)
- 子类 JsonProcessor 重写该方法,专做 JSON 解析;XmlProcessor 重写做 XML 解析
- 同时,JsonProcessor 内部再重载多个 process(String)、process(InputStream)、process(byte[]),把不同来源的数据都导向同一个重写的 process(Object)
注意边界,防止复用失效
重载不是越多越好,重写也不是随意覆盖。真正提高复用率的关键在于设计意图清晰:
- 重载方法之间应有明确的语义关联,避免因参数微小差异导致行为跳跃(如 save(User) 和 save(User, true) 一个存数据库一个只存缓存,建议拆成 saveToDb() 和 saveToCache())
- 重写必须遵守里氏替换原则:子类对象能安全替换父类对象,不能改变原有契约(如父类方法声明不抛异常,子类重写后也不应抛出新受检异常)
- 优先考虑组合优于继承,当行为差异过大时,用策略模式 + 接口可能比深度继承+重写更灵活

















