(轉)方法重載與方法覆蓋(重寫)
方法覆蓋必須滿足下列條件 (1) 子類的方法的名稱及參數必須和所覆蓋的方法相同 (2) 子類的方法返回類型必須和所覆蓋的方法相同 (3) 子類方法不能縮小所覆蓋方法的訪問權限 (4) 子類方法不能拋出比所覆蓋方法更多的異常 重載方法必須滿足下列條件 (1) 方法名必須相同 (2) 方法的參數簽名必須相同 (3) 方法的返回類型和方法的修飾符可以不相同 順便說說方法覆蓋和重載的區別 初次見到這兩個單詞并沒有什么特別的感覺,但是時間長了,卻發現書上一會兒用override,一會兒又用overload,搞得我的迷迷糊。于是就做了個總結,希望能對和我一樣對這兩個概念模糊不清的網友有一個幫助。 override可以翻譯為覆蓋,從字面就可以知道,它是覆蓋了一個方法并且對其重寫,以求達到不同的作用。對我們來說最熟悉的覆蓋就是對接口方法的實現,在接口中一般只是對方法進行了聲明,而我們在實現時,就需要實現接口聲明的所有方法。除了這個典型的用法以外,我們在繼承中也可能會在子類覆蓋父類中的方法。在覆蓋要注意以下的幾點: 1、覆蓋的方法的標志必須要和被覆蓋的方法的標志完全匹配,才能達到覆蓋的效果; 2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致; 3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類; 4、被覆蓋的方法不能為private,否則在其子類中只是新定義了一個方法,并沒有對其進行覆蓋。 overload對我們來說可能比較熟悉,可以翻譯為重載,它是指我們可以定義一些名稱相同的方法,通過定義不同的輸入參數來區分這些方法,然后再調用時,VM就會根據不同的參數樣式,來選擇合適的方法執行。在使用重載要注意以下的幾點: 1、在使用重載時只能通過不同的參數樣式。例如,不同的參數類型,不同的參數個數,不同的參數順序(當然,同一方法內的幾個參數類型必須不一樣,例如可以是fun(int,float),但是不能為fun(int,int)); 2、不能通過訪問權限、返回類型、拋出的異常進行重載; 3、方法的異常類型和數目不會對重載造成影響; 4、對于繼承來說,如果某一方法在父類中是訪問權限是priavte,那么就不能在子類對其進行重載,如果定義的話,也只是定義了一個新方法,而不會達到重載的效果。 下面是對override和overload的測試程序,其中注釋中的內容都是會產生編譯錯誤的代碼,我們將注釋去掉,看看在編譯時會產生什么效果。 //對overload測試的文件:OverloadTest.java publicnewOverrideTest1(); try{ test.fun(); test.fun1(); }catch(Exceptione){} } } classOverrideTest1extendsOverrideTest{ //以下正常Override publicvoidfun()throwsTestException2{ System.out.println("funinOverrideTest1"); } //不能Override父類中的方法,因為它定義了不同的異常類型和 //返回值。 //publicintfun()throwsTestException1{ //System.out.println("methodfuninTest"); //return1; //} //不能Override父類中的方法,因為它拋出了比父類中非法范圍 //更大的異常。 //publicvoidfun()throwsException{ //System.out.println("funinOverrideTest1"); //} //這個方法并沒有Override父類中的fun1方法,因為這個方法在 //父類是private類型,所以這里只是相當于定義了一個新方法。 publicvoidfun1(){ System.out.println("methodfun1inTest"); } } classTestExceptionextendsException{ publicTestException(Stringmsg){ super(msg); } } classTestException1extendsTestException{ publicTestException1(Stringmsg){ super(msg); } } classTestException2extendsTestException{ publicTestException2(Stringmsg){ super(msg); } }
參考資料:http://zhidao.baidu.com/question/1996221.html
posted on 2010-06-11 21:35 drecry 閱讀(453) 評論(0) 編輯 收藏 所屬分類: java中有關的問題