Java中子类重写父类的方法为啥返回值类型要小于等于父类方法的返回值类型?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中子类重写父类的方法为啥返回值类型要小于等于父类方法的返回值类型?相关的知识,希望对你有一定的参考价值。

个人观点:子类重写父类方法,假设子类和父类都有抛出异常的逻辑,假设父类抛出了IOException,而子类抛出了Exception(包含IOException),你可以想象一张小渔网怎么能网住一头鲸鱼,这就是子类抛出异常必须是父类异常的派生类的原因。
所以从返回上说,可以推出子类方法返回值类型不能大于父类方法,因为返回时抛出的异常必须能被父类捕获。
再补充一点:为什么重写还有一条规则是访问控制符必须高于父类?那是因为为了多态的实现。有时候父类需要上转型引用子类的方法实现多态,这就导致子类方法的访问控制符必须高于父类,否则子类里写成了private,父类还怎么访问?
同理,子类方法返回值类型小于父类,因为父类引用子类方法实现多态,你不能让一个返回空的方法的返回值经过一个不能返回空的方法出去。
参考技术A 方法覆盖的原则:
1:子类中的方法名必须跟父类中的相同,参数列表也必须相同
2:返回类型只有两种情况:
a:和父类相同
b:是父类中返回类型的子类
3:子类方法的访问权限,必须比父类方法的访问权限更大或者相同,但是必须注意如果父类访问权限是private,子类是继承不到的。所以不存在覆盖的概念

如果说返回值类型都不相同或者不是其返回类型的子类 那么就不能称之为方法的覆盖
参考技术B 首先你得明白继承的含义

字符类就是继承
继承之后有一个方法覆写的概念【非private】
覆写就是可以沿用父类的方法,但是沿用父类的该方法的返回值类型【这其实又涉及到了多态】

以上是关于Java中子类重写父类的方法为啥返回值类型要小于等于父类方法的返回值类型?的主要内容,如果未能解决你的问题,请参考以下文章

24. java面向对象 - 方法重写

java中方法的重写

方法重写与方法重载的区别

Java—重写与重载的区别

java重写和重载

重载和重写