問題:
父類或接口中定義了方法應(yīng)該拋出的異常,那么當(dāng)子類重寫方法時(shí)應(yīng)該怎樣定義將要拋出的異常:
首先定義異常和父類:
1 class Exception1 extends Exception {}2 class Exception2 extends Exception {}3 class Exception3 extends Exception {}4 class Exception1_1 extends Exception1 {}5 class Exception2_1 extends Exception2 {}6 class Exception3_1 extends Exception3 {}7 class SuperClass {8 public void method1() throws Exception1 , Exception2 , Exception3 {}9 }正確的方法覆蓋:
1. 子類方法只能拋出父類異常的子集合:
1 public class TestExceptionLimit extends SuperClass {2 @Override3 public void method1() {}4 }public class TestExceptionLimit extends SuperClass { @Override public void method1() throws Exception1 {}}1 public class TestExceptionLimit extends SuperClass {2 @Override3 public void method1() throws Exception1 , Exception2 , Exception3 {}4 }上面三種都可以。
2. 子類可以拋出父類異常的導(dǎo)出類:
1 public class TestExceptionLimit extends SuperClass {2 @Override3 public void method1() throws Exception1_1 , Exception2_1 {}4 }3. 還有一種特殊的情形,當(dāng)子類同時(shí)繼承一個(gè)父類和實(shí)現(xiàn)一個(gè)接口,而且這個(gè)父類和接口同時(shí)定義了簽名一樣的方法,但是拋出異常不一樣,那么子類應(yīng)該怎樣定義自己的方法異常:
新的代碼:
1 class Exception4 extends Exception {}2 class Exception5 extends Exception {}3 4 class SuperClass {5 public void method1() throws Exception4{}6 }7 interface TestInterface {8 public void method1() throws Exception5 ;9 }正確的覆蓋:
1 public class TestExceptionLimit extends SuperClass implements TestInterface {2 @Override3 public void method1(){}4 }注意:不要拋出任何異常,下面可以證明:
1 public class TestExceptionLimit extends SuperClass implements TestInterface {2 @Override3 public void method1() throws Exception4 {}4 }這段代碼編碼會(huì)出錯(cuò),錯(cuò)誤信息為:Exception Exception4 is not compatible with throws clause in TestInterface.method1()。表示和接口定義的異常不匹配,如果你嘗試拋出Exception5它又會(huì)告訴你和父類定義的異常不匹配,所以不寫還不行嘛--!,java設(shè)計(jì)者們還是挺人性化的~~~
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注