Java面试题更新 2026-08-05

Java 中方法重载(Overloading)和方法重写(Overriding)的区别是什么?

技术原理Java

考察说明

考查对 Java 面向对象多态基础概念的理解与区分。

回答思路

  1. 【回答框架 1】方法重载发生在同一类中,方法名相同但参数列表(类型、个数或顺序)不同,与返回类型和访问修饰符无关,编译期根据实参决定调用哪个方法。
  2. 【回答框架 2】方法重写发生在继承关系中,子类重新定义父类的方法,方法签名(名字和参数列表)必须相同,返回类型可以是子类型,不能缩小访问权限,不能抛出比父类更宽的受检异常。
  3. 【回答框架 3】重载是编译时多态,重写是运行时多态;重载通过静态类型决定调用,重写由对象实际类型决定,调用被重写方法时受动态绑定支配。
  4. 【回答框架 4】重写要求方法签名一致,而重载不要求;从 Java 5 起,重写可使用 @Override 注解校验,重载不需要注解。
  5. 【关键点 1】重载关注参数列表差异,重写关注继承与签名一致。
  6. 【关键点 2】重载在编译期静态绑定,重写是运行期动态绑定。
  7. 【关键点 3】重写不能缩小访问权限,返回类型可协变,抛出的受检异常范围不能扩大。
  8. 【关键点 4】重载不依赖返回类型区分,仅参数列表足以识别。
  9. 【关键点 5】构造方法可以重载但不能被重写。
  10. 【易错点 1】容易混淆重载和重写的绑定时机,重载看编译期静态类型,重写看运行期实际类型。
  11. 【易错点 2】重载时若只改变返回类型而参数相同,不是合法重载,会导致编译错误。
  12. 【易错点 3】重写时把参数列表改错,就变成重载而非重写,常见失误是漏加 @Override 而未被发现。