標籤:java編程思想
眾所周之,java中子類在覆蓋父類方法時,如果父類拋出了異常,子類必須也必須拋出父類的異常或者異常的子類。
下面用用代碼來證明這一結論:
package cn.itcast.exception;//下面定義三個自訂異常類,它們之間的關係如下:/*Exception|--AException|--BException|--CException*/class AException extends Exception{public AException(String msg){super(msg);}}class BException extends AException{public BException(String msg){super(msg);}}class CException extends Exception{public CException(String msg){super(msg);}}//測試類別class Test{public void function(Fu f){try {f.show();} catch (AException e) {System.out.println(e.toString());}}}//定義父類並定義一個show方法拋出A異常class Fu{public void show() throws AException{System.out.println("I am father");throw new AException("AEception by fu");}}//定義子類覆蓋父類show()方法class Zi extends Fu{public void show() throws BException{System.out.println("I am son");throw new BException("AException by zi");}}public class ExceptionDemo {public static void main(String[] args) {// TODO Auto-generated method stubTest t = new Test();t.function(new Zi());}}
上面的代碼中,測試類別Test的function的參數是父類Fu,調用f引用的show()方法,如果捕獲異常的話,就應該捕獲Fu的show方法的異常或其父類,這樣才不會違背多態的特性。
但在傳入function的參數時,傳遞是Fu的Zi類型對象,又用到了多態。f.show()調用的是子類的show方法,如果子類的show方法拋出非Fu類的show()方法的異常或其子類,必然會打破多態特性。
本文出自 “行意天下” 部落格,請務必保留此出處http://4259297.blog.51cto.com/4249297/1656639
Java編程思想之-反證法