跳转至

重载与重写的区别

一、重载(Overload)

同一个类里,方法名相同,参数不同:

void method(int a) {}
void method(String a) {}
void method(int a, int b) {}
  • 编译期确定(静态分派)。
  • 和返回值无关。

二、重写(Override)

子类重写父类方法:

class Animal { void speak() {} }
class Dog extends Animal {
    @Override
    void speak() {}   // 重写
}
  • 运行期确定(动态分派)。
  • 方法签名相同。

三、对比

重载 重写
位置 同类 父子类
方法名 相同 相同
参数 不同 相同
返回值 无关 兼容(协变返回)
异常 无关 不能更宽
访问权限 无关 不能更严
时机 编译期 运行期

四、@Override

标记重写,编译器检查签名是否正确。

五、特殊情况

  • static 方法不能重写。
  • private 方法不能重写。
  • final 方法不能重写。

一句话

重载看参数,重写看子类。