Java中的方法重载和重写区别是什么?

方法重载(Overloading)和重写(Overriding)都是实现多态的方式,主要区别有:

1、 发生范围不同

  • 重载只能发生在同一个类中
  • 重写只能发生在父子类之间

2、 参数列表不同

  • 重载的方法必须有不同的参数列表
  • 重写的方法必须有相同的参数列表
## www.itzhimei.com 代码块
class Parent {
  void method(int a) {}
}

class Child extends Parent {
  // 重写 - 参数列表相同
  void method(int a) {} 

  // 重载 - 参数列表不同 
  void method(int a, int b) {}
}

3、 返回类型不同

  • 重载可以有不同的返回类型
  • 重写需要相同的返回类型

4、 访问修饰符不同

  • 重载可以有不同的访问修饰符
  • 重写需要相同或更宽松的访问修饰符

5、 异常不同

  • 重载可以抛出任何异常
  • 重写只可以抛出相同的异常或父类异常的子集

概括地说,重载是同一个类中方法的多态,重写是父类子类间方法的多态。两者在参数、返回值、访问控制等有区别。