Java中子类重写父类的方法为什么返回值类型要小于等于父类方法的返回值类型?
3个回答
展开全部
个人观点:子类重写父类方法,假设子类和父类都有抛出异常的逻辑,假设父类抛出了IOException,而子类抛出了Exception(包含IOException),你可以想象一张小渔网怎么能网住一头鲸鱼,这就是子类抛出异常必须是父类异常的派生类的原因。
所以从返回上说,可以推出子类方法返回值类型不能大于父类方法,因为返回时抛出的异常必须能被父类捕获。
再补充一点:为什么重写还有一条规则是访问控制符必须高于父类?那是因为为了多态的实现。有时候父类需要上转型引用子类的方法实现多态,这就导致子类方法的访问控制符必须高于父类,否则子类里写成了private,父类还怎么访问?
同理,子类方法返回值类型小于父类,因为父类引用子类方法实现多态,你不能让一个返回空的方法的返回值经过一个不能返回空的方法出去。
所以从返回上说,可以推出子类方法返回值类型不能大于父类方法,因为返回时抛出的异常必须能被父类捕获。
再补充一点:为什么重写还有一条规则是访问控制符必须高于父类?那是因为为了多态的实现。有时候父类需要上转型引用子类的方法实现多态,这就导致子类方法的访问控制符必须高于父类,否则子类里写成了private,父类还怎么访问?
同理,子类方法返回值类型小于父类,因为父类引用子类方法实现多态,你不能让一个返回空的方法的返回值经过一个不能返回空的方法出去。
展开全部
方法覆盖的原则:
1:子类中的方法名必须跟父类中的相同,参数列表也必须相同
2:返回类型只有两种情况:
a:和父类相同
b:是父类中返回类型的子类
3:子类方法的访问权限,必须比父类方法的访问权限更大或者相同,但是必须注意如果父类访问权限是private,子类是继承不到的。所以不存在覆盖的概念
如果说返回值类型都不相同或者不是其返回类型的子类 那么就不能称之为方法的覆盖
1:子类中的方法名必须跟父类中的相同,参数列表也必须相同
2:返回类型只有两种情况:
a:和父类相同
b:是父类中返回类型的子类
3:子类方法的访问权限,必须比父类方法的访问权限更大或者相同,但是必须注意如果父类访问权限是private,子类是继承不到的。所以不存在覆盖的概念
如果说返回值类型都不相同或者不是其返回类型的子类 那么就不能称之为方法的覆盖
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先你得明白继承的含义
字符类就是继承
继承之后有一个方法覆写的概念【非private】
覆写就是可以沿用父类的方法,但是沿用父类的该方法的返回值类型【这其实又涉及到了多态】
字符类就是继承
继承之后有一个方法覆写的概念【非private】
覆写就是可以沿用父类的方法,但是沿用父类的该方法的返回值类型【这其实又涉及到了多态】
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |