重写和重载是java多态的不同表现
重写(子类与父类多态表现)
子类对父类允许访问的方法的实现过程进行重写,返回值和形参都不能改变。
规则:
1.参数列表必须与被重写的方法一致
2.返回值相同或为被重写方法返回值的派生类
3.访问权限不能比被重写得方法低
4.父类的成员方法只能被子类重写(即重写的前提是继承)
5.final 方法、构造方法、static 方法不能被重写
6.重写的方法不能抛出比被重写方法声明更广泛的异常
重载(一个类的多态表现)
同个类中,方法名相同,参数列表不同,返回值可以相同可以不同的方法
规则:
1.方法名相同,参数列表不同(参数个数或参数类型)
2.修饰符和返回类型可以不同
3.可以声明新的或更广的异常
4.可以在同一个类中或者在其子类中重载
5.无法以返回值类型作为重载限制
区别 | 重载 | 重写 |
---|---|---|
参数列表 | 必须改变 | 一定不能改变 |
返回类型 | 可以改变 | 相同或派生类 |
异常 | 可以修改 | 可以减少或删除,不能抛出新的 |