第6章重載與多態(tài).ppt_第1頁
第6章重載與多態(tài).ppt_第2頁
第6章重載與多態(tài).ppt_第3頁
第6章重載與多態(tài).ppt_第4頁
第6章重載與多態(tài).ppt_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

第6章重載與多態(tài) 6 1類成員的覆蓋6 2方法重載6 3抽象類和最終類6 4接口 本章要點 掌握在Java中覆蓋的實現(xiàn)方式掌握在Java中重載的實現(xiàn)方式掌握抽象類的概念理解接口的概念 掌握它在Java中的實現(xiàn) 6 1類成員的覆蓋 6 1 1覆蓋的用法子類對繼承自父類的類成員重新進行定義 就稱為覆蓋 它是一種很重要的多態(tài)形式 要進行覆蓋 就是在子類中對需要覆蓋的類成員以父類中相同的格式 再重新聲明定義一次 這樣就可以對繼承下來的類成員進行功能的重新實現(xiàn) 從而達到程序設計的要求 publicclassMethodOverride publicstaticvoidmain String args SubClasss newSubClass s fun classSuperClass inti 1 publicvoidfun System out println Super System out println 父類的i i classSubClassextendsSuperClass inti 2 publicvoidfun System out println Sub System out println 子類的i i super fun 例6 1覆蓋的用法 例6 1程序運行結(jié)果如圖所示 6 1 2使用被覆蓋的成員 1 域變量的隱藏子類重新定義一個與從父類那里繼承來的屬性變量完全相同的變量 稱為域變量的隱藏 對于域變量的隱藏來說 父類定義的域變量在子類對象實例化時仍然分配一個存儲空間 當子類執(zhí)行繼承自父類的操作時 處理的是繼承自父類的變量 而當子類執(zhí)行它自己定義的方法時 所操作的就是它自己定義的變量 而把繼承自父類的變量 隱藏 起來 publicclassExtendsExam publicstaticvoidmain String args subclasse newsubclass System out println Sup getX 方法結(jié)果 e Sup getX System out println Sub getX 方法結(jié)果 e Sub getX classsuperclass publicintx 10 intSup getX return x classsubclassextendssuperclass privateintx 20 intSub getX return x 例6 2域變量的隱藏 例6 2程序運行結(jié)果如圖所示 2 方法的覆蓋 子類重新定義與父類同名的方法 實現(xiàn)時父類方法的覆蓋 Overload 方法的覆蓋與域的隱藏的不同之處在于 子類隱藏父類的域只是使之不可見 父類的同名域在子類對象中仍然占有自己的獨立內(nèi)存空間 而子類方法對父類同名方法的覆蓋將清除父類方法占用的內(nèi)存空間 從而使父類方法在子類對象中不復存在 方法的覆蓋中需要注意的問題是 子類在重新定義父類已有的方法時 應保持與父類完全相同的方法頭聲明 即應與父類有完全相同的方法名 返回值和參數(shù)列表 否則就不是方法的覆蓋 而是子類定義自己的與父類無關的方法 父類的方法未被覆蓋 所以仍然存在 classsuperClass voidsuperPrint System out println ThisissuperClass classsubClassextendssuperClass voidsuperPrint System out println ThisissubClass publicclassmyInherit publicstaticvoidmain Stringargs subClasssubObject newsubClass subObject superPrint 子類對象調(diào)用子類的方法superClasssuperObject newsuperClass superObject superPrint 父類對象調(diào)用父類的方法 例6 3方法的覆蓋 例6 4程序運行結(jié)果如圖所示 3 super參考 相對this來說 super表示的是當前類的直接父類對象 是當前對象的直接父類對象的引用 所謂直接父類是相對于當前類的其他 祖先 類而言的 publicclassExtendsExam publicstaticvoidmain String args subclasse newsubclass e Sub printX classsuperclass publicintx 10 intSup getX return x voidSup printX System out println Sup printX 方法結(jié)果 Sup getX classsubclassextendssuperclass privateintx 20 intSub getX return super x 修改部分 voidSub printX System out println Sub getX 方法結(jié)果 Sup getX super Sup printX 例6 5super參考 例6 5程序運行結(jié)果如圖所示 6 2方法重載 6 2 1方法的重載在Java中 同一個類中的兩個或兩個以上的方法可以有同一個名字 只要它們的參數(shù)聲明不同即可 在這種情況下 該方法就被稱為重載 overloaded 這個過程稱為方法重載 methodoverloading 方法重載是Java實現(xiàn)多態(tài)性的一種方式 有兩個規(guī)則適用于重載方法 調(diào)用語句的參數(shù)表必須有足夠的不同 以至于允許區(qū)分出正確的方法被調(diào)用 方法的返回類型可以各不相同 但它不足以使返回類型變成唯一的差異 重載方法的參數(shù)表必須不同 publicclassOverloadExam publicstaticvoidprint Stringstr System out println String str publicstaticvoidprint inti System out println int i publicstaticvoidmain String args print 123 print 123 例6 6方法重載 例6 7程序運行結(jié)果如圖所示 6 2 2構(gòu)造函數(shù)的重載 例6 8構(gòu)造函數(shù)的重載publicclassEmployee privateStringname privateintsalary publicEmployee Stringn ints name n salary s publicEmployee Stringn this n 0 publicEmployee this Unknown 6 3抽象類和最終類 6 3 1抽象類在Java中 凡是用abstract修飾符修飾的類稱為抽象類 定義一個抽象類的格式如下 abstractclassClassName 類的主體部分 抽象類和一般的類不同之處在于 如果一個類中含有未實現(xiàn)的抽象方法 那么這個類就必須通過關鍵字abstract進行標記聲明為抽象類 抽象類中可以包含抽象方法 但不是一定要包含抽象方法 它也可以包含非抽象方法和域變量 就像一般類一樣 抽象類是沒有具體對象的概念類 也就是說抽象類不能實例化為對象 抽象類必須被繼承 子類為它們父類中的所有抽象方法提供實現(xiàn) 否則它們也是抽象類 abstractclassfatherClass abstractvoidabstractMethod voidprintMethod System out println fatherClassfunction classchildClassextendsfatherClass voidabstractMethod System out println childClassfunction publicclassmainClass publicstaticvoidmain Stringargs childClassobj newchildClass obj printMethod obj abstractMethod 例6 9抽象類 例6 9程序運行結(jié)果如圖所示 6 3 2最終類 如果一個類被final修飾符所修飾和限定 說明這個類不可能有子類 這樣的類就稱為最終類 最終類不能被別的類繼承 它的方法也不能被覆蓋 被定義為final的類通常是一些有固定作用 用來完成某種標準功能的類 如Java系統(tǒng)定義好的用來實現(xiàn)網(wǎng)絡功能的InetAddress Socket等類都是final類 6 4接口 6 4 1接口的定義Java中聲明接口的語法如下 public interface接口名 extends父接口名列表 接口體 常量域聲明 public static final 域類型域名 常量值 抽象方法聲明 public abstract native 返回值方法名 參數(shù)列表 throw異常列表 在Java中接口是一種專門的類型 用interface關鍵字定義接口 接口中只能定義抽象方法 不能有方法體 一定是public修飾的 接口中可以定義變量 但實際上是staticfinal修飾的常量 接口中不能定義靜態(tài)方法 定義接口可歸納為如下幾點 publicinterfaceSup InterfaceExam publicstaticfinalintx inty publicvoidz publicabstractintgetz publicinterfaceSub InterfaceExamextendsSup InterfaceExam publicstaticfinalinta intb publicvoidc publicabstractintgetc classMyClassimplementsSub InterfaceExam Sup InterfaceExam publicvoidz publicintgetz return1 publicvoidc publicintgetc return5 例6 10定義接口 接口不能包含任何可以執(zhí)行的方法 而抽象類可以 類可以實現(xiàn)多個接口 但只有一個父類 接口不是類分級結(jié)構(gòu)的一部分 而沒有聯(lián)系的類可以執(zhí)行相同的接口 接口與抽象類的區(qū)別 6 4 2接口的實現(xiàn) 一個類要實現(xiàn)接口時 請注意以下問題 在類的聲明部分 用implements關鍵字聲明該類將要實現(xiàn)哪些接口 如果實現(xiàn)某接口的類不是abstract抽象類 則在類的定義部分必須實現(xiàn)指定接口的所有抽象方法 如果實現(xiàn)某接口的的類是abstract的抽象類 則它可以不實現(xiàn)該接口所有的方法 但是對于這個抽象類任何一個非抽象的子類而言 它們父類所實現(xiàn)的接口中的所有抽象方法都必須有實在的方法體 個類在實現(xiàn)某接口的抽象方法時 必須使用完全相同方法頭 如果所實現(xiàn)的方法與抽象方法有相同的方法名和不同的參數(shù)列表 則只是在重載一個新的方法 而不是實現(xiàn)已有的抽象方法 接口的抽象方法的訪問限制符都已制定為public 所以類在實現(xiàn)方法時 必須顯式地使用public修飾符 否則將被系統(tǒng)警告為縮小了接口中定義的方法的訪問控制范圍 interfaceA inta 1 interfaceB intb 2 publicabstractvoidpp interfaceMyInterfaceextendsA B 接口的繼承abstractclassAbstractInterfaceExamimplementsA B 抽象類

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論