A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑小杰 中级黑马   /  2012-7-8 15:33  /  1820 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

子类抛出的异常不能超过父类相应方法抛出的异常(子类异常不能大于父类异常) 。这句话是什么意思啊,帮忙解释一下

4 个回复

倒序浏览
本帖最后由 丁二跃 于 2012-7-8 15:56 编辑
  1.   class F{
  2.         public void dis() throws TF{
  3.                
  4.         }
  5. }
  6.   
  7.   class Z extends F{
  8.         public void dis()throws Exception {
  9.         }
  10.   }
  11.   
  12.   class TF extends Exception{         
  13.   }
复制代码
看代码来说明一下吧
Z 类 继承了 F 类, TF 是自定义的异常类 继承于Exception
类Z中的dis()方法重写了父类中的dis()方法。 在父类抛出TF异常,子类抛出Exception异常,那么此时编译就会出错。
因为子类抛出的异常大于父类抛出的异常。

子类为什么要重写父类呢?有一方面是因为它要处理一些父类处理不了的东西。可以理解成子类比父类在处理一个问题上能力更强,那么他就应该产生更少的错误。就像我们办一件事情,你做过一次了出了一些错误,又要我重新做一次,如我的错误比你还多,那要我再做一次就没什么意义了吧
回复 使用道具 举报
给你举一个简单的比较通俗的例子
定义一个动物类,它有个方法叫eat() ,吃东西会抛出被毒死的异常,那么它的子类在重写eat()方法时可以抛出被毒死异常,如"被老鼠药毒死"、"被毒蘑菇毒死"等异常,但是就不能抛出被毒死之外的异常,如:“撑死异常”和“噎死异常”,因为父类是一个大前提,指的是所有动物。他的子类全都继承了父类的被毒死异常。

例子有点恐怖,但是便于理解,希望可以帮到你。

评分

参与人数 1技术分 +1 收起 理由
刘笑 + 1 赞一个!

查看全部评分

回复 使用道具 举报
父类抛出的异常有A,B,C,D,E,F
子类只能抛出上面的及其子集,如A,B,C 或A,F
一定不能抛出其它异常如G异常
如果真发生了G异常,只能自己try解决了。
第10天第三课中有述

评分

参与人数 1技术分 +1 收起 理由
刘笑 + 1 赞一个!

查看全部评分

回复 使用道具 举报
问下抢到沙发的丁二哥  你用的神马文本编辑器器啊?怎么把代码复制成你那样的格式 谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马