重写和重载的区别
一.重写
1. 重写概念
- 重写是父类与子类中的多态性,子类可以继承父类中的方法并进行重写,但是要保证几点没有变
1)方法返回值类型不变
2)参数列表不变
3)方法名不变 - 满足了这三点之后,子类中父类的方法就被覆盖了,如果想要调用父类的方法,用super关键字
2.重写规则
- 重写也是有一定的规则的,否则会报错
- 重写规则:
1)参数列表必须完全与被重写的方法相同;
2)返回类型必须一直与被重写的方法相同;
3)访问修饰符的权限一定要大于等于父类方法的访问修饰符;
4)重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常,譬如父类方法声明了一个检查异常 IOException,在重写这个方法时就不能抛出 Exception,只能抛出 IOException 的子类异常,可以抛出非检查异常。
二.重载
1.重载概念
- 重载也是多态性的一种表现,即同一类中存在多个同名函数,但是参数列表的长度和参数类型不同
- 调用方法时会根据传入的参数个数和参数类型来选择调用哪个方法
- 注意: 不能以返回值类型作为函数重载的区分标志
原因其实很简单:以下两个方法如何区分?这两个方法是无法通过编译的!会报错
double sqrt(double do){return...}
float sqrt(double do){return...}
2.重载规则
- 参数个数可以不同
- 参数类型可以不同
- 对于返回值类型,其实重载没有要求,但是实际上在编写代码过程中,可以看作必须返回值类型相同,因为不同就不能称为重载了,就无法区分了!
三.重写和重载的区别和联系
- 方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。