重载是同一类中方法名相同但参数列表不同,体现编译时多态;重写是子类覆盖父类同名同参方法,体现运行时多态,需满足继承关系、签名一致及访问权限不缩严等约束。

区分 Java 中的方法重载(Overload)和方法重写(Override),关键看三点:发生位置、方法签名是否变化、以及是否涉及继承关系。一句话总结:重载是“同一个类里多个同名但参数不同的方法”,重写是“子类改写父类中完全同名同参的方法”。
看是否在同一个类内
重载一定发生在同一个类中,或者子类中对从父类继承来的方法进行重载(仍属本类定义)。比如一个类里写了多个 print():一个接受 String,一个接受 int,一个接受 String, int——这全是重载。
重写则必须有父子类继承关系,且子类中出现的方法,其名称、参数列表、返回类型都与父类中某个非 private / non-static / non-final 方法完全一致。
看方法签名(名称 + 参数列表)是否相同
重载要求:方法名相同,参数列表必须不同(类型、个数或顺序任一不同即可),返回值类型无关紧要,甚至可以不同。
void show(int x)void show(String s)void show(int x, String s)
重写要求:方法名、参数列表、返回类型三者必须完全一致(Java 5 后允许协变返回类型,即子类可返回父类返回类型的子类,如父类返回 Number,子类可返回 Integer)。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
看访问修饰符、异常、其他限制
重载对访问修饰符、异常声明、static/final 属性无特殊限制——你可以在同一类中重载 private 方法,也能让重载方法抛出任意异常。
重写有严格约束:
- 子类方法的访问权限不能比父类更严格(
public→protected不行,但protected→public可以) - 不能重写
private、static、final方法(static方法同名只是“隐藏”,不是重写) - 不能抛出比父类方法更宽泛的检查异常(如父类抛
IOException,子类只能抛IOException或其子类,不能抛Exception)
看编译期还是运行期决定调用哪个
重载由编译器在编译时决定,依据是变量声明类型和实参类型。比如 Object obj = new String("a"); print(obj); 调用的是 print(Object),不是 print(String)。
重写由JVM 在运行时动态绑定,依据是对象的实际类型。比如 Animal a = new Dog(); a.sound(); 执行的是 Dog.sound(),这就是多态的核心体现。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










