方法重载要求同一类中同名方法参数列表不同,即参数个数、类型或顺序至少一项不同;返回值类型、访问修饰符、异常声明等差异不构成重载。

方法重载:发生在同一个类中,看“参数列表”
重载(Overload)是编译时多态,核心判断标准只有三个字:同名不同参。只要方法名相同,但参数个数、类型或顺序不同,就构成重载——返回值类型、访问修饰符、异常声明全都不影响重载判定。
常见误区提醒:
- 仅返回值不同 ≠ 重载(编译报错)
- 构造方法也能重载,且非常高频(如 new ArrayList(10) 和 new ArrayList())
- 基本类型自动提升(如 int 传给 long 参数)会触发重载匹配,但包装类与基本类型混用时要注意拆箱/装箱引发的歧义
方法重写:子类对父类非私有方法的二次实现,看“运行时对象类型”
重写(Override)是运行时多态,本质是动态绑定,关键在子类改行为,不改约定。必须满足:方法名、参数列表、返回类型(协变返回类型除外)完全一致;访问权限不能更严格;抛出的检查异常不能新增或变宽。
高频注意点:
- private / static / final 方法不能被重写(private 不可见,static 属于类,final 禁止覆盖)
- @Override 注解不是摆设——加了却没真正重写,编译直接报错,强烈建议强制使用
- 子类重写后,通过父类引用调用该方法,执行的是子类版本(多态体现),比如 List list = new ArrayList(); list.add(...) 调用的是 ArrayList 的 add
重载 vs 重写:一张表看清本质区别
大厂面试常让对比,记住这个逻辑锚点:
- 发生位置:重载一定在同一个类;重写一定在父子类之间
- 绑定时机:重载靠编译器静态决定(看引用类型);重写靠 JVM 运行时决定(看实际对象类型)
- 目的不同:重载是为了“同一操作的多种输入方式”(API 友好);重写是为了“同一接口的不同实现逻辑”(开闭原则落地)
真题金句速记(直接背,面试脱口而出)
不用解释,简洁有力:
- “重载看参数,重写看对象。”
- “重载是静态多态,重写是动态多态。”
- “重载解决‘能不能用’的问题,重写解决‘怎么用’的问题。”
- “重载是方法签名的横向扩展,重写是行为契约的纵向深化。”
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











