151
社区成员
发帖
与我相关
我的任务
分享方法重载(Overload)和方法重写(Override)是 Java 面向对象编程中多态特性的两种重要体现,也是面试、代码设计中最基础也最容易混淆的知识点。清晰区分二者,能让程序结构更简洁、扩展性更强。
一、方法重载(Overload)
方法重载指同一个类中,方法名相同,但参数列表不同的多个方法。
编译器会根据传入参数的类型、个数、顺序自动匹配对应的方法。
重载的核心规则
1. 方法名必须完全相同
2. 参数列表必须不同
◦ 参数个数不同
◦ 参数类型不同
◦ 参数顺序不同
3. 返回值类型、修饰符不影响重载
仅返回值不同不能构成重载
4. 发生在同一个类中
示例
public class MathUtil {
// 两个 int 相加
public int add(int a, int b) {
return a + b;
}
// 三个 int 相加 → 个数不同
public int add(int a, int b, int c) {
return a + b + c;
}
// double 类型相加 → 类型不同
public double add(double a, double b) {
return a + b;
}
}
重载的意义
• 统一方法命名,提高可读性
• 一套功能多种参数形式,使用更方便
• 典型应用:System.out.println() 可输出任意类型
二、方法重写(Override)
方法重写是子类继承父类后,重新实现父类中已有的方法,以满足子类自身逻辑。
也叫方法覆盖。
重写的核心规则
1. 方法名、参数列表、返回值类型必须完全一致
2. 子类方法不能缩小父类方法的访问权限
父类 public → 子类只能 public
父类 protected → 子类可 protected 或 public
3. 子类不能抛出比父类更大的异常
4. 必须有继承关系
5. 父类的 static、final、private 方法不能被重写
示例
class Animal {
public void eat() {
System.out.println("动物吃东西");
}
}
class Dog extends Animal {
// 重写父类方法
@Override
public void eat() {
System.out.println("狗吃骨头");
}
}
@Override 注解用于检查重写是否规范。
三、方法重载 vs 方法重写(核心对比表)
对比项 方法重载 Overload 方法重写 Override
位置 同一个类内部 子类继承父类
方法名 相同 相同
参数列表 必须不同 必须完全相同
返回值 不影响重载 必须相同
访问权限 无限制 子类不能更严格
异常 无限制 不能抛出更大异常
作用 方便调用,统一命名 子类扩展或修改父类逻辑
四、多态中的体现
• 重载:编译时多态(静态绑定)
编译器在编译阶段就确定调用哪个方法
• 重写:运行时多态(动态绑定)
程序运行时根据对象实际类型决定调用哪个方法
Animal animal = new Dog();
animal.eat(); // 运行时执行 Dog 的 eat() → 重写体现
五、实际开发意义
1. 方法重载
◦ 工具类统一接口设计
◦ 构造方法重载
◦ 提高代码可读性与易用性
2. 方法重写
◦ 实现子类个性化逻辑
◦ 框架扩展核心方式
◦ 多态编程基础,提高代码可扩展性
六、总结
方法重载是同类中同名方法的不同参数形式,侧重“方便使用”;
方法重写是子类对父类方法的重新实现,侧重“扩展逻辑”。
二者共同支撑 Java 的多态特性,是面向对象设计的基础,也是判断 Java 基础是否扎实的典型考点。