黑马程序员技术交流社区

标题: 子集意思是不是不能抛出子类 [打印本页]

作者: asinzuo    时间: 2015-8-18 07:37
标题: 子集意思是不是不能抛出子类
一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或异常的子类。

如果父类抛出多个异常,那么覆盖方法必须抛出那些异常的一个子集,不能抛出新的异常。---即不能抛出异常的子类?


作者: fmi110    时间: 2015-8-18 07:37
”如果父类抛出多个异常,那么覆盖方法必须抛出那些异常的一个子集,不能抛出新的异常。“
假设 父类抛出两个异常类  IOException 和 IndexOutofBoundExcetiop,则这两个类组成就是一个集合
A{  IOException , IndexOutofBoundExcetiop }
那么集合A的子集 有 集合 B{ IOException }  C{ IndexOutofBoundExcetiop }  集合D{  IOException , IndexOutofBoundExcetiop }(A本身)
所以覆盖方法只能抛出哪些异常的子集,即要么 抛 IOException;  要么抛 IndexOutofBoundExcetiop  ;要么 IOException 和 IndexOutofBoundExcetiop
不能抛新异常,比如不能抛 FileNotFoundException ,因为它不是 父类抛出异常的子集。
“异常的子类”是可以抛的,这个就先记住嘛   比如父类说 我感冒了  , 然后子类进行检查发现,没错,是感冒了,但是我发现这个是  病毒引起的感冒 (感冒分类下的一个子类) ,所以抛出 病毒引起的感冒 ,这种抛出异常的子类的情况  是可以接受的,因为系统还是能确定异常就是感冒;但是你如果给抛出一个不是感冒范畴的异常  比如心脏病,这个是不允许的,因为父类只说了 会 感冒,你给它包其它类型的病  它不识别,但是只要报的是属于感冒类的就可以
作者: 肖天长    时间: 2015-8-18 13:19
1、如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。
2、如果父类方法抛出多个异常,那么子类再覆盖该方法时,只能抛出父类异常的子集。
(也就是父类如果抛多个异常,那么我们不能直接抛Exception异常。)
(如果抛一个异常的时候,是可以抛父类异常的)
3、如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。
子类方法发生了异常,就必须要进行try处理,绝对不能抛。
4、如果在子类的覆盖方法确实需要抛出非父类的异常或者该异常的子类,则必须在内部解决。
作者: chajinglong    时间: 2015-8-18 14:22
楼上解释的很正确!
作者: wyd1    时间: 2015-8-18 16:29
可以抛出新的异常,但是抛的顺序要从低到高
作者: 阳光下的小树33    时间: 2015-8-18 17:00
这样的规定应该是从多态德角度考虑德,如果传入德是一个父类的引用指向子类德对象德話,那么超出父类能抛出的异常就无法处理了。
作者: 明天你好,微笑    时间: 2015-8-18 21:45

1、如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类
作者: leiyingyin    时间: 2015-8-19 00:25
长知识了.......
作者: 张森zs    时间: 2015-8-19 16:32
你可以抛出这些异常的父类,也可以try。。。catch。。。
作者: l_15562009298    时间: 2015-8-19 18:15
当前处理不了的抛到上一层
作者: l_15562009298    时间: 2015-8-19 18:26
当前不能很好处理的,抛到上一层去,或是到虚拟机进行处理
作者: l_15562009298    时间: 2015-8-21 15:41
子类的覆盖方法的异常处理是在超类中进行
作者: wyd1    时间: 2015-8-22 22:59
居然还没有彼岸准答案错线?
作者: 蛋糕的爱意    时间: 2015-8-23 00:28
又学习......................了..................
作者: asinzuo    时间: 2015-8-24 19:55
我就是想问子集是否包括子类
作者: asinzuo    时间: 2015-8-24 20:05
总结就是,可以抛出子集以及子集们的子类。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2