Java 重写(Override)与重载(Overload)
1.重写(Override)
重写是子类对父类的允许访问的方法的实现过程进行重新编写!返回值和形参都不能改变。即外壳不变,核心重写!
- 参数列表和返回值类型必须与被重写方法相同。
- 访问权限必须低于父类中被重写方法的权限。
- 父类成员方法只能被子类重写。
- final 和static修饰的方法不能被重写,但是static 的方法可以被再次声明。
- 父类方法不能被继承,则不能重写
- 父类和子类在同包内,子类可以继承父类所有方法除了final修饰,和private修饰的。
- 父类和子类不同包,public 和protected 和非final 修饰的方法。
- 构造方法不能被重写。
- 重写方法可以抛出任何非强制性异常,无论被重写方法是否抛出异常。但是重写方法有比不能有比被重写方法更广泛的异常。
Super关键字的使用
当需要在子类中调用父类的被重写方法时,要使用super关键字。
重载(Overload)
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型呢?可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
只能重载构造函数
重载规则
- 被重载的方法必须改变参数列表;
- 被重载的方法可以改变返回类型;
- 被重载的方法可以改变访问修饰符;
- 被重载的方法可以声明新的或更广的检查异常;
- 方法能够在同一个类中或者在一个子类中被重载。
重写与重载之间的区别
区别点 | 重载方法 | 重写方法 |
---|---|---|
参数列表 | 必须修改 | 一定不能修改 |
返回类型 | 可以修改 | 一定不能修改 |
异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) |