重写(覆盖)
子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变;(外壳不变,核心重写),子类可以根据需要重写父类的方法;
注意:如果父类的一个方法申明了一个检查异常IOException,但是在重写这个方法的时候不能抛出Exception异常,因为Exception是IOException的父类,只能抛出IOException 的子类异常.
在面向对象原则里,重写就意味可以重写任何现有的方法.
重写的规则:
1. 参数列表和返回值类型必须和被重写的方法完全相同
2. 访问权限子类必须大于等于父类
3. 父类的方法只能被它的子类重写
4. 声明为final的方法不能被重写
5. 声明为static的方法不能被重写,但是能被再次声明
6. 在同一包内,子类可以重写除了声明为private和final的方法;
7. 在不同包内.子类子只能重写声明为public和protected的非final方法;
8. 构造方法不能被重写
9. 如果不能继承一个方法就不能重写这个方法
重载
在同一个类中,方法名相同.而参数列表不同(参数类型,参数个数,参数顺序),与返回值无关
重载规则:
1. 被重载的方法必须改变参数列表
2. 可以改变返回值类型,也可以不改变
3. 可以改变访问的修饰符
4. 被重载的方法可以声明新的更广的检查异常???????
5. 方法能够在同一个类中或者在同一个子类中被重载
区别点 重载 重写
参数列表 必须修改 一定不能修改
返回值类型 可以修改 一定不能修改
异常 可以修改 可以减少或者删除,一定不能抛出新的或
者更广的异常
访问 可以修改 一定不能做更严格的限制(可以降低限制)
重载是一个类的多态性表现
重写是子类与父类的一种多态表现