黑马程序员技术交流社区

标题: 当子类覆盖父类方法是,只能比父类抛出更少的异常,或者是... [打印本页]

作者: Akm    时间: 2013-6-13 12:41
标题: 当子类覆盖父类方法是,只能比父类抛出更少的异常,或者是...
为什么 ?当子类覆盖父类方法是,只能比父类抛出更少的异常,
或者是抛出父类抛出的异常的子异常


作者: 孙茜茜    时间: 2013-6-13 12:50
我只知道:子类只能抛出父类里面的异常的子集,若是子类自己真有异常,只能内部try和catch,不能往外抛

但原因还真不知道
作者: 蚂蚁搬家    时间: 2013-6-13 13:00
子类重写父类方法注意事项:
1,重写时方法的返回值类型、方法名、形参都不能变,即方法头不能变,重写的是方法体;
2,子类重写方法的访问权限不能比父类被重写方法更严格,即父类用的是public,子类就不能用private;
3,子类重写方法抛出的异常范围不能大于父类被重写方法的异常范围,即父类抛出IOException,子类就不能抛出Exception;
作者: dongyangzhang    时间: 2013-6-13 13:05
父类已经具备比较全面的功能方法和异常,子类只是使用了父类的全部或者一部分功能,当子类覆盖父类方法时,要考虑父类的异常,子类异常比父类多的话,会报错,所以子类只能比父类抛出更少的异常。
作者: Heart    时间: 2013-6-13 13:23
子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类是为了可以解决父类的一些问题,肯定不能比父类有更多的问题。
覆盖父类方法抛出的异常只能是以下情况(比如父类抛出IOEception异常):
1.要和父类方法抛出的异常一致,抛出IOEception异常
2.抛出的异常是父类抛出异常的子类,如EOFException异常
3.不抛出异常。
4.java.lang.RuntimeException异常或者其子孙类异常

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


作者: Renica    时间: 2013-6-13 15:08
子类对父类实现继承,所以子类就只能抛出的异常少点。
作者: 曾林魁    时间: 2013-6-13 16:48
      理解这个问题你首先要明白一点,在程序中除了RuntimeException和error之外,所有的异常都需要在程序方法上用throws
声明抛出或用try-catch捕获;
  像下面的程序:
  class  Fu{
    public void method()throws   IOException{
             ........}

class Zi extends FU{
public void method()throws   Exception{
            ..........}
}
在子类方法中声明抛出了比父类范围更大的异常;这在编译的时候显然就不会通过;
当子类抛出了不是IOException体系中异常时;系统就无法处理:

作者: 孙百鑫    时间: 2013-6-14 05:06
楼主您好如果问题解决的话.请将问题及时改成已解决哦~谢谢您 的配合{:soso_e100:}
作者: 夜默    时间: 2013-6-14 11:19
楼主你好,问题解决了没? 解决了就去修改成 “已解决”吧!
作者: ′х.|鰉❤耔    时间: 2013-6-14 12:47
还有点就是关于try-catch的,在排除异常的时候最好用对应的异常类,然后如果要有多个catch异常的话就要从小到大的去匹配异常,如果是从大到小的就会就有问题了
作者: 神之梦    时间: 2013-6-14 14:07
这个在老师视频中举例说明过原因,具体我记不太清楚了,把记得的稍微说下吧。
比如父类中有多个方法,其中有个方法A抛出异常,而方法B调用了A方法,并对A的异常进行了处理。
现在子类继承父类,并覆盖了A方法,但是没有覆盖B方法,假如子类在覆盖A时再抛出其他异常,
现在子类可以使用A方法和B方法,假设现在使用B方法,B方法会调用A方法,而A方法被覆盖,调用的就是被覆盖后的A方法,问题来了:
B方法对A方法抛出的异常会进行处理的,但是A被覆盖后,产生的新异常不属于父类中A抛出异常或其子类的话,B就处理不了,处理不了就会报错!!!!!
所以。。。。。。。。。。。。。
作者: peerless2012    时间: 2013-6-14 16:16
子类只能抛出和父类异常相同或者父类异常的子类异常。如果抛出比父类更大的异常,父类根本就无法处理啊
作者: 孙百鑫    时间: 2013-6-22 01:10
楼主您好~帖子长时间未作出回答,我已经将您的帖子改成已解决。如果有问题的话可以私密我哦~




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