(37)接口实现和覆盖时的异常特点

异常在子父类覆盖中的体现:

①:子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类

举个栗子:

              Exception

                      ------AException

                                 ------BException

                     -------CException

           Fu

            ------Zi



public class AException extends Exception {
    
}
public class BException extends AException {
    private String message;
    BException (String message){
        super(message);
    }
}
public class CException {

}

public class Fu {

    public void show ()throws AException {
        
    }
}
public class Zi extends Fu {
public void show ()throws AException//可能对此处的throwsAException不太明白,此处声明只是让调用者写trycatch时,那个
                                      catch(AException e)  异常类名确定,然后根据多态就容易理解了。
       {
            //若此方法内真的会出现CException异常,那么应该在此方法内通过trycatch解决掉,而不能声明
        
    }
}
public class Test {
    public void function(Fu f) 
           {
        try {
            f.show();
        } catch (AException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }

}

public class Demo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
      
        Test t=new Test();
        t.function(new Fu());
    }

}
主要是对多态的理解:
                t.function(new Fu());创建本类对象,没啥说的
                t.function(new Zi());传到function方法中时,父类引用指向子类引用,Fu f=new Zi();在try中执行Zi类中的
               show方法,若发现AException问题,能够捕捉到,并处理。
                         若发现子类BException问题,根据多态的特点,AException e=new BException(),catch同样能够捕捉到,
                         若发现是不相干CException问题,不能被捕获到,程序会结束                








②如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集

③如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常

   如果子类方法发生了异常,就必须要进行try处理,绝对不能抛

总结①②③就是子类不能自己找事








                                    
posted @ 2017-07-10 16:51  测试开发分享站  阅读(129)  评论(0)    收藏  举报