覆盖java中的方法约束

Java中重写方法具有以下功能

1 GT; Overrinding方法应该与Parent类方法具有相同的参数列表.

2 – ;返回类型应该是父类方法的返回类型的相同/子类.

3 GT;访问级别应与父类方法相同或更少限制.

4> overriden方法可以抛出相同或更窄的异常,而不是更广泛的异常.

*只是想知道为什么这么点*

* 2 – 为什么不是超类的子类?*

3 – 为什么访问级别应该限制较少?

4 – 为什么它应该抛出狭窄的异常?

根据我的理解它只是如果我创建一个父类refrence创建一个子类对象并尝试运行每个方案然后

让我们假设A是父类,B是子类,它们都有方法printAndReturnSomething()

public class A{

       public B printAndReturnSomething(){
                S.O.P("Inside A Print");
                return new B();
              }
}

现在我们将子类B作为

public class B extends A{
       public A printAndReturnSomething(){ // I kNow this isn't possible to return A but had it been then
                S.O.P("Inside A Print");
                return new A();
              }
}

现在,如果我做这样的事情

A a =new B();

现在因为我有一个A的引用,所以我希望返回类型是B类型

B returnedValue=a.printAndReturnSomething(); // But it actually calls the child class method and hence returns A. So here comes the conTradiction.

Similaraly为场景3和4.我的理解是否正确?我错过了其他更相关的东西吗?

最佳答案
所有这些都可以通过说“子类必须表现得好像它是一个超类”来概括.因此,如果Derived扩展Base并且我有一个Derived类型的对象x,那么我希望它的行为就像它是Base类型一样.

因此,如果x.foo()返回某个类型T,并且Base :: foo()返回一个类型S,那么我希望能够将x.foo()视为S,因此T最好与或者相同S的子类

类似地,x.foo()应该只抛出Base:foo()所承诺的异常.它无法开始抛出新的意外异常.

如果Base :: foo()是公共的,那么x.foo()也应如此.你不能突然对派生类有更严格的限制,因为基类承诺我是公开的.

总是将继承视为“表现得像超级类”,或“可以像超类一样对待”,所有这一切都应该清楚.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


应用场景 C端用户提交工单、工单创建完成之后、会发布一条工单创建完成的消息事件(异步消息)、MQ消费者收到消息之后、会通知各处理器处理该消息、各处理器处理完后都会发布一条将该工单写入搜索引擎的消息、最终该工单出现在搜索引擎、被工单处理人检索和处理。 事故异常体现 1、异常体现 从工单的流转记录发现、
线程类,设置有一个公共资源 package cn.org.chris.concurrent; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @Descrip
Java中的数字(带有0前缀和字符串)
在Java 9中使用JLink的目的是什么?
Java Stream API Filter(过滤器)
在Java中找到正数和负数数组元素的数量
Java 9中JShell中的不同启动脚本是什么?
使用Java的位填充错误检测技术
java中string是什么
如何使用Java中的JSON-lib API将Map转换为JSON对象?
Java菜单驱动程序以检查数字类型
使用Junit的Maven项目 - 检查银行账号
JAVA编程基础
在Java中使用throw、catch和instanceof来处理异常
在Java中,将数组分割为基于给定查询的子数组后,找到子数组的最大子数组和
如何在Java中从给定的字符串中删除HTML标签?
在PHP中,IntlChar getBlockCode()函数的翻译如下:
如何在Android中实现按下返回键再次退出的功能?
如何使用Java中的流式API解析JSON字符串?
Java中的模式类