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

2025-01-09 02:25:03
推荐回答(5个)
回答1:

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

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

还有我查到说抛出runtime异常没有问题。运行时异常虽然可以不用捕获。但如果其本身已经超出了父类的范围呢?
这个还是拿宪法民事责任来说把,宪法说骂人教育一下就可以了,到了省里说道个歉就可以了,但是到了市里了,不光道歉还要写检讨。这些都是可以的,因为他们本身就有处理这个事件的能力。子类方法他可以不管RuntimeException之类的异常,这是前提,就算你父类方法声明的异常更小,我可以行使我抛出RuntimeException异常的权利,这个是我的本身就有的权利。这就像是地方政策和国家政策相抵触的时候,老百姓可以直接往国家报告,可以不经过地方政府一样,因为老百姓有直接上报国家的权利。子类有RuntimeException异常不报告的权利,就算你父类规定个更低的异常,我一样可以上报,只要你比RuntimeException低级就可以。
这就好比,卖国贼选择了卖国,他们的子女就不能爱国了一样!

回答2:

  1. 有异常抛出的代码一般放入 try...catch 以进行异常捕获,根据情况进行分析。还可以以多个catch进行捕获,进而可以已不同情况进行处理。

  2. 如果已知异常类型,可以用对应的异常进行捕获,如果简单点话,直接用Exception进行。

回答3:

重写方法需要抛出与原方法所抛出异常类型一致异常或不抛出异常。

这句话的意思我想不用解释了。

至于,子类抛出的异常类型不能比父类抛出的异常类型更宽泛。

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

回答4:

子类抛出的异常类型不能比父类抛出的异常类型更宽泛!
是说覆盖父类方法抛出的异常只能是以下情况(比如父类抛出IOEception异常):
1.要和父类方法抛出的异常一致,抛出IOEception异常
2.抛出的异常是父类抛出异常的子类,如EOFException异常
3.不抛出异常。
4.java.lang.RuntimeException异常或者其子孙类异常

在catch子句中心抛出一个比父类型更宽泛的异常。可以。

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

回答5:

比如 :子类的异常必须在父类的异常之内
简单的说就是 父类的异常包含了子类的

如果父类抛出的是Exception
那么子类随便什么异常就可以...因为任何异常都继承于Exception
子类的异常要也要是父类的异常的子类 不知道怎么说你懂了不