重写@Override和重载的区别

什么是方法签名

方法签名:由方法名称和方法的形参列表(形参类型和形参顺序)共同组成。

需要注意的是:方法签名不包括方法的返回值类型和访问修饰符。

重载和重写的区别

那方法签名在java中具体的运用方式是什么呢?这就要谈到重写和重载的区别了。

当子类Son继承了父类Father之后,如果需要重写父类的方法,如何保证这个方法是重写父类的的而不是子类自己重载的呢?

重写:前提是继承,子类中定义的方法与父类中的方法具有相同的方法名字、相同的参数列表、相同的返回类型(允许子类中方法的返回值是父类中方法返回值的子类),即相同的方法签名和返回类型,至于方法修饰符,需要范围相同或者比父类的范围大即可;

重载:同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表或者有不同的返回类型。

总结:
重写:
1.发生在父类与子类之间
2.方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同
3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常

重载:
1.重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序)
2.重载的时候,返回值类型可以相同也可以不相同。因此无法以返回类型作为方法重载的区分标准

@override注解

阿里巴巴java开发手册第一章第四节关于OOP 规约中强制要求:所有的覆写方法,必须加@Override 注解。这个注解的作用是:当子类重写父类的方法时,重写的方法上加上@override注解,编辑器会检查是否和父类是同一个方法,如果不是的话,会立马报错。

例如,阿里巴巴开发规范给出的案例:getObject()与 get0bject()的问题。一个是字母的 O,一个是数字的 0,加@Override可以准确判断是否覆盖成功。另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错。

猜你喜欢

转载自blog.csdn.net/liutao43/article/details/110151408
今日推荐