异常在子父类覆盖中的体现:
①:子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类
举个栗子:
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处理,绝对不能抛
总结①②③就是子类不能自己找事