Java編程思想之-反證法

來源:互聯網
上載者:User

標籤: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編程思想之-反證法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.