覆盖java中的方法约束
在Java中重写方法具有以下功能: 1 GT; Overrinding方法应该与Parent类方法具有相同的参数列表. 2 – ;返回类型应该是父类方法的返回类型的相同/子类. 3 GT;访问级别应与父类方法相同或更少限制. 4> overriden方法可以抛出相同或更窄的异常,而不是更广泛的异常. *只是想知道为什么这么点* * 2 – 为什么不是超类的子类?* 3 – 为什么访问级别应该限制较少? 4 – 为什么它应该抛出狭窄的异常? 根据我的理解它只是如果我创建一个父类refrence创建一个子类对象并尝试运行每个方案然后 让我们假设A是父类,B是子类,它们都有方法printAndReturnSomething()
现在我们将子类B作为
现在,如果我做这样的事情
现在因为我有一个A的引用,所以我希望返回类型是B类型
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()也应如此.你不能突然对派生类有更严格的限制,因为基类承诺我是公开的. 总是将继承视为“表现得像超级类”,或“可以像超类一样对待”,所有这一切都应该清楚. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |