下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
有時候,類的同一種功能有多種使成為事實方式,到底采用那種使成為事實方式,取決于調(diào)用者給定的參數(shù)。例如雜技師能訓(xùn)練動物,對于差別的動物有差別的訓(xùn)練方式。publicvoidtrain(Dogdog){〃訓(xùn)練小狗站立,排隊,做算數(shù)}publicvoidtrain(Monkeymonkey){〃訓(xùn)練野猴騎腳踏車等}再如某個類的一個功能是比較兩個城市是否相同,一種方式是比較兩個城市的名兒,一種是除開比較兩個城市的名兒外,還要比較所在國度的名兒。publibooleanisSameCity(Stringcity1,Stringcity2){returncity1.equals(city2);}publicbooleanisSameCity(Stringcity1,Stringcity2,StirngCountry1,StringCountry2){returnisSameCity(city1,city2)&&Country1.equals(Country2);}在例如java.lang.Math類的max()方法可以或許從兩個數(shù)字中取出最大值,它有多種使成為事實方式。publicstaticintmax(inta,intb)publicstaticintmax(longa,longb)publicstaticintmax(floata,floatb)以下程序?qū)掖握{(diào)用Math類的max()方法,運行時,Java虛擬機先判斷給定參數(shù)的類型,之后決議到底執(zhí)行哪一個max()方法。//參數(shù)為int類型,因此執(zhí)行max(inta,intb)方法Math.max(1,2);//參數(shù)為flloat類型,因此執(zhí)行max(floata,floatb)方法Math.max(1.0F,2.9F);對于類的方法(包括從父類中繼承的方法)如果有兩個方法的方法名相同,但參數(shù)不相符,那么可以說,一個方法是另一個方法的重載方法。重載方法滿完全可以下條件方法名相同方法的參數(shù)類型,個數(shù),順序至少有一項不相同方法的歸回類型可以不相同方法的修飾符可以不相同在一個類中不容吧可定義另個方法名相同,而且參數(shù)簽名也完全相同的方法。假如存在這樣的兩個方法,Java虛擬機在運行時就沒有辦法決議到底執(zhí)行哪一個方法。參數(shù)簽名是指參數(shù)的類型,個數(shù)和順序。例如:publicclassSample{publicvoidamethod(inti,Strings){}}下面哪一個方法可以加入到Sample類中去?publicvoidamethod(Strings,inti)//OKpublicintamethod(inti,Strings){return0}//NO-〃不行,參數(shù)簽名和類中方法一樣publicvoidamethod(inti,StringmyString){}//NO-〃不行,參數(shù)簽名和類中方法一樣publicvoidAmethod(inti,Stings){}//OK,,〃可以,因為Amethod和amethod是兩個差別的方法名稱。abstractvoidamethod(inti);//NO-盡管它的參數(shù)列和類中方法參數(shù)不一樣,但是,此處的Sample類不是抽象類,所以不能包括這個抽象方法。假如把Sample類改為抽象類,就能把這個方法加入到Sample類中了。?(源碼)publicbooleancompareCity(Stringcity1,Stringcity2){returncity1.equals(city2);}?publicintcompareCity(Stringcity1,Stringcity2){?if(city1.equals(city2)){return1;}else{return0;?}?}編譯紕繆:compareCity(java.lang.String,java.lang.String)isalreadydefined//compareCity(String,String)方法已經(jīng)被定義過作為程序的入口main()方法也可以被重載。publicstaticvoidmain(Stringargs[]){}publicvoidmain(Strings,inti){}//可以privatevoidmain(inti,StringmyString[]){}//可以publicvoidmain(Strings)throwsException{}//可以publicfinalstaticintmain(Stringargs[]){}//不可以它已經(jīng)和已有的main()方法有相同的簽名,因此不容吧可再加到這個類中來。main(java.lang.String[])isalreadydefinedinSample方法覆蓋假若有100個類,別離是Sub1,Sub2,Sub3…….Sub100,它們的一個配合舉動是寫字,除開Sub1用腳寫字外,其他都手寫字??梢猿橄笠粋€父類Base,它有一個暗示寫字的方法write(),那么這個方法到底如何使成為事實呢?從盡有可能提高代碼可重用性的角度看,write()方法應(yīng)該采納合用于大多數(shù)子類的使成為事實方式,這樣就可以避免在大多數(shù)子類中反復(fù)定義write()方法。因此Base類的write()方法定義如下:publicvoidwrite(){//Base類的write()方法手寫字}由于Sub1類的寫字的使成為事實方式與Base類不一樣,因此在Sub1類中必需重新定義write()方法。publicvoidwrite(){//Sub1類中的write()方法//用腳寫字}如果在子類中定義的一個方法,其名稱,歸回類型及參數(shù)簽名正好與父類中某個方法的名稱,歸回類型及參數(shù)簽名相匹配,那么可以說,子類的方法覆蓋了父類的方法。覆蓋方法必需滿足多種約束子類方法的名稱,參數(shù)簽名和歸回類型必需與父類方法的名稱,參數(shù)簽名和歸回類型相符?例如,下列代碼將發(fā)生編譯紕繆,,publicclassBase{..publicvoidmethod(){.}..}.publicclassSubextendsBase{,,publicintmethod(){return0};//編譯紕繆-}“method()inSimon.Subcannotoverridmethod()inSimon.Base;“attemptingtouseincompatiblereturntype"在Simon包Sub中的方法不不能重寫(覆蓋)在Simon包Base類中的方法-試圖用不匹配的歸回類型Java編譯器首先判斷Sub類的method()方法與Base類的method()方法的參數(shù)簽名。由于二者相符,所以Java編譯器就認為Sub類的method()方法試圖覆蓋父類的方法,既然如此,Sub類的method()方法就必需和被覆蓋的方法具有相同的歸回類型。?以下代碼中子類覆蓋了父類的一個方法,之后又定義了一個重載方法,這是正當?shù)??!皃ublicclassBase{"publicvoidmethod(){..}}“publicclassSubextendsBase{publicvoidmethod(){.}//覆蓋Base類的method方法publicintmehod(inta){return0.}//重載method方法?}子類方法不能縮小父類方法的拜候職權(quán)范圍。例如以下代碼中子類的method()方法是私用的,父類的method()方法是大眾的,子類縮小了父類方法的拜候職權(quán)范圍,這是無效的方法覆蓋,將導(dǎo)致編譯紕繆。publicclassBase{"publicvoidmethod(){..}?}publicclassSubextendsBase{privatevoidmethod(){.}//覆蓋Base類的method方法,但是縮小了父類方法拜候職權(quán)范圍}method()inSimon.Subcannotoverridemethod()inSimon.Base;"attemptingtoassignweakeraccessprivileges;"waspublic"Simon包中的Sub類method()不能重寫、覆蓋Simon包中Base類的method()方法。-試圖分配一個更弱的拜候職權(quán)范圍?原來是public(現(xiàn)在卻是private)?為啥子子類方法不容吧可縮小父類方法的拜候職權(quán)范圍呢?這時因為假如沒有這個限定,將于Java語言的多態(tài)機制發(fā)生沖突。"Basebase=newSub();//base變量被定義為Base類型,但引用Sub的實例。base.method();-Java編譯器認為以上是正當?shù)拇a,但是在運行時,根據(jù)動態(tài)綁定規(guī)則,Java虛擬時機調(diào)用base變量所引用的Sub實例的method()方法,如果這個方法為private類型,Java虛擬機就沒有措施拜候它.所以為了避免這樣的矛盾,Java語言不容吧可子類方法縮小父類中被覆蓋方法的職權(quán)范圍。子類方法不能拋出比父類方法更多的異常。?子類方法拋出的異常必需和父類方法拋出的異常相同,或子類方法拋出的異常類是父類拋出的異常類的子類。"假設(shè)異常類ExceptionSub1和ExceptionSub2是ExceptionBase類的子類,則以下代碼是正當?shù)摹ublicclassBase{voidmethod()throwsExceptionBase{}?}publicclassSub1extendsBase{,,voidmethod()throwsExceptionSub1{}"}"publicclassSub2extendsBase{"voidmethod()throwsExceptionSub1,ExceptionSub2"}"publicclassSub3extendsBase{"voidmethos()throwsExceptionBase"}"以下代碼不正當,,publicclassBase{,,voidmethod()throwsExceptionSub1{},■}“publicclassSub1extendsBase{“voidmethod()throwsExceptionBase{}〃編譯出錯}“publicclassSub2extendsBase{"voidmethod()throwsExceptionSub1,ExceptionSub2{}//編譯出錯?}?為啥子子類不容吧可拋出比父類方法更多的異常呢?這時因為假如沒有這個限定,將會與Java語言的多態(tài)機制發(fā)生沖突。"Basebase=newSub2();//base變量被定義為Base類型,但引用Sub2的實例。try{"base.met
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 政府采購寵物醫(yī)療服務(wù)合同
- 產(chǎn)品安全與合規(guī)性管理合同
- 中學(xué)團委工作制度
- 智慧園區(qū)信息化系統(tǒng)建設(shè)整體解決方案
- 2024至2030年中國簡易型停車場收費管理系統(tǒng)數(shù)據(jù)監(jiān)測研究報告
- 質(zhì)量保修擔(dān)保合同
- 119消防安全教育活動策劃方案
- 煤礦事故現(xiàn)場處置管理制度
- 體育用品代加工合同
- 2024至2030年中國光帶燈行業(yè)投資前景及策略咨詢研究報告
- 有限空間監(jiān)護人員安全職責(zé)
- 2023年6月英語六級聽力真題(第一套)題目-原文與答案
- 儉以養(yǎng)德主題班會課件
- 2023北京海淀區(qū)初一(上)期中英語試卷及答案
- 香港優(yōu)才計劃文書模板
- 人工智能與科學(xué)之美智慧樹知到課后章節(jié)答案2023年下湘潭大學(xué)
- 人教版(新插圖)二年級上冊數(shù)學(xué) 第3課時 銳角、鈍角的認識 教學(xué)課件
- 山東省濟南市市中區(qū)實驗中學(xué)2024屆高二物理第一學(xué)期期中達標測試試題含解析
- 二年級上冊語文第八單元基于標準的教學(xué)設(shè)計
- 遼能康平300MW風(fēng)電項目環(huán)境影響報告表
- 坐標紙(A4紙直接打印就可用)
評論
0/150
提交評論