黑马程序员技术交流社区

标题: 异常在子父类中的表现问题 [打印本页]

作者: 渴望学习    时间: 2014-7-21 17:48
标题: 异常在子父类中的表现问题
如果父类抛出了多个异常,那么子类在覆盖时只能抛出父类异常的子集。
子集指的是什么?  是不是每个异常的子类
作者: 燿陚√揚葳    时间: 2014-7-21 18:15
是的,可以抛出该异常的子类
异常在子父类覆盖中的体现
1.子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类
2.如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集
3.如果父类或者接口的方法中没有抛出异常,那么子类在覆盖方法时也不可以抛出异常
    如果子类方法发生了异常,就必须要进行try处理,绝对不能抛

如下面的代码:
  1. class AException extends Exception{

  2. }
  3. class BException extends AException{

  4. }
  5. class CException extends Exception{

  6. }
  7. class DException extends CException{

  8. }
  9. class EException extends Exception{

  10. }
  11. class Fu{
  12. public void show()throws AException,CException{}
  13. }
  14. class Zi extends Fu{
  15. /*子类可以抛出AException或者BException,DException,如果AException有其他的子类那么
  16. 不能抛出EException,也就是说父类抛出的异常或者该异常的子类都可以,父类有多个异常,子类可以抛出
  17. 那些异常的子类,就是子集*/
  18. public void show()throws AException,BException,DException{}
  19. }
  20. public class ExceptionDemo {

  21. public static void main(String[] args) throws Exception{


  22. }

  23. }
复制代码





作者: star5603    时间: 2014-7-21 19:18
子类只能抛出父类异常或者异常的子集。如果父类没有抛,那子类绝对不能抛,只能catch。
还有,异常的catch顺序。一个异常的子类异常要catch在前面,该异常在catch在后面。就像RuntimeException的catch要在Exception的catch前面,否则会编译失败。
作者: 渴望学习    时间: 2014-7-22 10:13
燿陚√揚葳 发表于 2014-7-21 18:15
是的,可以抛出该异常的子类
异常在子父类覆盖中的体现
1.子类在覆盖父类时,如果父类的方法抛出异常,那么 ...

感谢!!!!!
作者: Adjin    时间: 2014-7-22 12:24
意思就是假如父类抛了10个异常,那么子类出现异常,只能抛这10个异常中的异常,不能抛这10个之外的了
作者: 掌柜的--刘饮    时间: 2014-7-22 13:15
异常啊,还得回去补补




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