我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:金算盘心水论坛 > 抛出异常 >

java覆盖问题。覆盖父类方法抛出异常问题

归档日期:07-08       文本归类:抛出异常      文章编辑:爱尚语录

  另有下面疑问,我在子类中调用父类的该方法,抛出父类的异常。但如果我将这个异常catch住,在catch子句中心抛出一个比父类型更宽泛的异常。感觉应该也可以。

  还有我查到说抛出runtime异常没有问题。运行时异常虽然可以不用捕获。但如果其本身已经超出了父类的范围呢?

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  一个方法是否显示抛出异常对于重写是没用影响的,只是对调用者有影响,对于使用者来说如果你抛出的是一个未报告的异常那他就要必须使用trycatch来捕获异常了。而且你要注意如果说你显示抛出一个UnsupportedOperationException之类的异常,调用该方法可以不用自己来亲自捕获异常的,可以直接再往上次抛。RuntimeException异常类以及其子类都属于此范畴,调用者可以不用自己去捕获异常的!

  对于这句话你还少了一个条件应该是子类重写父类方法不能抛出比父类更宽的异常类型的把。其实理解这个很简单,比如说宪法规定骂人只承担民事责任,到了刑法里就不能说直接枪毙了,这就是一个约束能力的问题,子类行为不能超出父类约束范畴。否者就容易乱套。就像父类的某方法公有的,子类就不能重写改成私有的了。这就是一个约束力的问题。

  还有我查到说抛出runtime异常没有问题。运行时异常虽然可以不用捕获。但如果其本身已经超出了父类的范围呢?

  这个还是拿宪法民事责任来说把,宪法说骂人教育一下就可以了,到了省里说道个歉就可以了,但是到了市里了,不光道歉还要写检讨。这些都是可以的,因为他们本身就有处理这个事件的能力。子类方法他可以不管RuntimeException之类的异常,这是前提,就算你父类方法声明的异常更小,我可以行使我抛出RuntimeException异常的权利,这个是我的本身就有的权利。这就像是地方政策和国家政策相抵触的时候,老百姓可以直接往国家报告,可以不经过地方政府一样,因为老百姓有直接上报国家的权利。子类有RuntimeException异常不报告的权利,就算你父类规定个更低的异常,我一样可以上报,只要你比RuntimeException低级就可以。

  这样想,为什么需要抛出异常?是因为处理不了或者不应该由该方法处理,所以外抛,编译器认为,能产生的异常全部被抛出了,就不报错了。但是如果父类允许抛出数组下标越界异常,子类允许抛出了RuntimeException,要是子类抛出的是空指针异常,那么父类不能外抛,因为外抛的一场类型不符合。你明白了?

  是说覆盖父类方法抛出的异常只能是以下情况(比如父类抛出IOEception异常):

  runtime异常,比如0除以0会抛出ArithmeticException的异常就属于runtime异常,这种异常可以不捕获、可以不抛出。他不是IOEception的子孙类异常

本文链接:http://izytravel.com/paochuyichang/402.html