方法重载(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、 异常不同
- 重载可以抛出任何异常
- 重写只可以抛出相同的异常或父类异常的子集
概括地说,重载是同一个类中方法的多态,重写是父类子类间方法的多态。两者在参数、返回值、访问控制等有区别。