java中方法的重写与重载
2023.2.15
先观察两者之间的区别:
方法重写 | 方法重载 | |
---|---|---|
出现位置 | 子类与父类中、接口与实现类中 | 同一个类中 |
方法名、参数和返回类型 | 方法名和参数列表完全相同,重写方法的返回值可以是被重写方法返回值的子类 | 方法名一致,返回类型与重载无关,参数个数、顺序和参数类型不同 |
修饰符 | 重写后的修饰符权限必须大于等于重写前的权限 | 可以有不同修饰符 |
异常的抛出 | 只能抛出非运行时异常,以及比被重写方法声明更狭隘的异常 | 可以抛出不同的异常 |
区分方法重写和重载:
- 最简单直接的办法就是编译器中重写方法上会带一个注解
@Override
,而重载方法不会带@Overload
(override=>重写,overload=>重载,有时候人家不会问你重写和重载的区别,而是override和overload的区别)
- 直接将两个方法的返回类型、方法名、参数类型放一起进行比较,如果在一个方法在父类一个方法在子类或者一个方法在接口一个方法在实现类的前提下完全一致,则为重写(不包括修饰符的比较)
其中参数的顺序不是看其中的a,b,c,而是看前面的参数类型,即使更换,也不会影响方法的重写,原理可以参考c语言的形参与实参
只要不满足重写中的完全相同,则注解会报错(此处顺序被修改)
而重载就看方法名是否相同,是否在同一个类,参数是否有改变即可
同样的,参数的顺序指的是类型的顺序,只改变形参顺序只会报错:方法重复
只改变返回值,也不是重载