1. 程式人生 > >子類異常和父類異常捕獲的關係

子類異常和父類異常捕獲的關係

class ExampleA extends Exception{
	private String a=null;
	//這裡必須加上無參的建構函式,因為自己定義了有參的建構函式,則會覆蓋原來無參建構函式
	//但是子類構造物件時候會先呼叫父類的建構函式,其中會預設先呼叫super方法,該方法是呼叫父類的無參建構函式,若沒有定義就會報錯
	public ExampleA(){}//所以必須寫出無參的建構函式,寫了有參就要寫無參,除非程式不再呼叫無參的,否則呼叫就會報錯
	public ExampleA(String a){
		this.a=a;
	}
}

//當構造物件時候就會預設呼叫super方法,先呼叫父類的無參建構函式,super預設呼叫的

class ExampleB extends ExampleA{
	private String b=null;
	public ExampleB(String b){
		this.b=b;
	}
}


//最後的輸出僅僅只是Example
public class Test7 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//這裡丟擲一個ExampleB類物件的一個異常
		try{
			throw new ExampleB("b");
		//這裡先catch該父類ExampleA中異常
		}catch(ExampleA e){
			//若捕獲到就輸出EXampleA
			System.out.println("ExampleA");
		//這裡數ExampleA的父類,但是這裡捕獲不到異常new ExampleB(“b”)異常了,因為異常已經被子類ExampleA捕獲走了,除非子類捕獲不到的異常才會執行捕獲
		//但是如果先catch父類的異常,子類的異常就會失效,不會執行
		}catch(Exception e){
			//所以該catch語句就不會執行了,即不會再輸出”Example“
			System.out.println("Example");
		}
	}

}