黑马程序员技术交流社区

标题: 关于方法重写 [打印本页]

作者: 郑小杰    时间: 2012-7-8 15:33
标题: 关于方法重写
子类抛出的异常不能超过父类相应方法抛出的异常(子类异常不能大于父类异常) 。这句话是什么意思啊,帮忙解释一下
作者: 丁二跃    时间: 2012-7-8 15:48
本帖最后由 丁二跃 于 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异常,那么此时编译就会出错。
因为子类抛出的异常大于父类抛出的异常。

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

例子有点恐怖,但是便于理解,希望可以帮到你。
作者: 黑马-李勇    时间: 2012-7-8 15:57
父类抛出的异常有A,B,C,D,E,F
子类只能抛出上面的及其子集,如A,B,C 或A,F
一定不能抛出其它异常如G异常
如果真发生了G异常,只能自己try解决了。
第10天第三课中有述
作者: 付蛟龙    时间: 2012-7-8 16:20
问下抢到沙发的丁二哥  你用的神马文本编辑器器啊?怎么把代码复制成你那样的格式 谢谢




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