重写(override)
重写是子类对父类方法的实现过程进行重新编写,返回值和形参都不能改变。即外壳不变,核心重写。重写方法不能抛出新的检查异常或者比重写方法更加宽泛的异常。
规则:
1、参数列表必须完全与被重写方法相同
2、返回类型必须完全与被重写方法的返回类型相同
3、访问权限不能比被重写方法的访问权限低
4、父类的成员方法只能被他的子类重写
5、构造方法不能被重写
重载(overload)
重载是在一个类里面,方法名字相同,而参数个数不同,返回类型可以相同也可以不同。每个重载的方法,都必须做到一个独一无二的参数类型列表,最常用的地方就是构造器的重载。
规则:
1、被重载的方法必须改变参数列表
2、被重载的方法可以改变返回类型
3、被重载的方法可以改变访问修饰符
5、被重载的方法可以声明新的或者更广的检查异常
6、方法能够在一个类中或者一个子类中被重载
7、无法以返回值类型作为重载函数的区分标准
重载与重写区别:
区别点 |
重载方法 |
重写方法 |
参数列表 | 必须修改 | 一定不修改 |
返回类型 | 可以修改 | 一定不修改 |
异常 | 可以修改 | 可以减少或者删除,一定不能抛出新的或者更广泛的异常 |
访问 | 可以修改 | 一定不能做更严格的限制 |
总结:
方法的重载和重写是java多态性的不同表现,重写是父类与子类之间多态性的不同表现,重载可以理解成多态的具体表现形式。
- 方法重载是一个类中定义了多个名称相同的方法,而他们的参数的数量不同或者数量相同而类型和次序不同,叫做方法的重载。区别的重点在于参数的不同,而返回值类型相不相同没有关系。
- 方法重写是在子类存在方法与父类的方法的名称相同,而且参数个数与类型一样,返回值也一样的方法,就称为重写。
- 方法重载是类的多态性的表现,而方法重写是子类与父类的一种多态性表现。