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

xiaoxiao2021-02-28  62

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

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

举个栗子:

              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处理,绝对不能抛

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

转载请注明原文地址: https://www.6miu.com/read-33137.html

最新回复(0)