項目3 面向對象核心技術_第1頁
項目3 面向對象核心技術_第2頁
項目3 面向對象核心技術_第3頁
項目3 面向對象核心技術_第4頁
項目3 面向對象核心技術_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

面向對象核心技術項目三高等院校公共課系列精品教材Java開發(fā)綜合實戰(zhàn)主動拓寬視野,把握事物的共性,著眼于事物之間的關系繼承優(yōu)秀傳統(tǒng)文化并創(chuàng)新,多形態(tài)呈現(xiàn)正能量人文精神思政目標能夠使用繼承類和重寫方法實現(xiàn)對象多樣化能夠使用方法重載和類轉型實現(xiàn)多態(tài)能夠使用抽象類、接口和內部類實現(xiàn)多重繼承技能目標面向對象編程有三大基本特性:封裝、繼承和多態(tài)。封裝的載體是類,封裝細節(jié),能提高代碼的安全性和復用性。繼承和多態(tài)本身也是很抽象的概念,需要讀者有較寬廣的視野,能站在對象共性的高度,把握不同對象的細節(jié)和相互關系,從而構建高效和具有良好擴展性和維護性的程序架構。本項目主要介紹繼承和多態(tài)在Java程序中的實現(xiàn)方法,以及抽象類、接口和內部類在面向對象編程中的應用。項目導讀任務1繼承與多態(tài)任務2抽象類與接口任務3內部類知識梳理繼承與多態(tài)任務1任務1繼承與多態(tài)任務引入通過上一個項目的學習,小白了解了面向對象編程的一些基本概念和操作,要編寫出面向對象的程序代碼,還需要掌握繼承和多態(tài)的實現(xiàn)方法。在Java中,實現(xiàn)類的繼承和多態(tài)有哪些常用方法呢?知識準備繼承是一種由已有的類創(chuàng)建新類的機制。利用繼承,可以先定義一個共有屬性的一般類,根據(jù)這個一般類再定義具有特殊屬性的新類。多態(tài)是指同一個行為具有多種不同表現(xiàn)形式。簡單來說,就是“對外一種定義,內部多種實現(xiàn)”。Java中的多態(tài)有兩種意義:操作名稱的多態(tài)和基于繼承實現(xiàn)的多態(tài);實現(xiàn)多態(tài)有三個必要條件:繼承、重載和向上轉型。一、實現(xiàn)繼承子類可以繼承父類原有的屬性和方法,也可以增加自己特有的屬性和方法。例如,正方形是一種特殊的四邊形,正方形類繼承了四邊形類的所有屬性和方法,還擴展了一些正方形特有的屬性和方法。在類的聲明中,使用關鍵字extends聲明一個類繼承另一個類,定義一個子類一個類可以有多個子類,子類又可以作為父類派生其他子類。任務1繼承與多態(tài)注意:Java僅支持單繼承,也就是說一個類只可以有一個直接的父類。二、方法重寫重寫(override)也稱為覆蓋,是指在子類中定義一個方法,該方法的名稱和參數(shù)列表與父類的成員方法相同,但修改或重新編寫了實現(xiàn)內容、返回值類型或訪問權限修飾符。也就是說,在Java中重寫方法必須滿足以下兩個條件:子類方法名和父類方法名必須相同參數(shù)類型、個數(shù)、順序必須完全相同任務1繼承與多態(tài)注意:重寫父類成員方法的返回值類型是基于JavaSE5.0版本以上編譯器的新功能。重寫父類方法時,不能降低方法的訪問權限,也就是說,只能從小范圍向大范圍改變。例如,訪問權限從高到低為public、protected、private,可以將protected修改為public,但不能修改為private。案例——描述不同交通工具的時速本案例通過繼承類與重寫方法,描述不同交通工具的行駛速度。任務1繼承與多態(tài)運行結果三、操作隱藏的父類成員super有兩個功能:(1)調用父類的成員變量和方法,(2)調用父類的構造方法。語法格式如下:super.變量名:調用父類的成員變量。super.方法名(參數(shù)列表):調用父類的成員方法。super(參數(shù)列表):調用父類的有參構造方法。如果沒有參數(shù),則調用父類的無參構造方法,此時可以省略不寫。任務1繼承與多態(tài)案例——蝴蝶與動物的關系本實例重寫父類的成員方法,并使用super關鍵字調用父類的構造方法、成員變量和成員方法,演示super關鍵字的使用方法。任務1繼承與多態(tài)

運行結果四、使用final關鍵字在某些情況下,出于安全考慮,不希望類中的方法被重寫覆蓋或修改,這種情況下可以使用關鍵字final進行聲明。關鍵字final表示不可改變,不僅可修飾方法,還可修飾類以及類的成員變量。語法格式如下:(1)修飾類(2)修飾類的成員方法(3)修飾類的成員變量任務1繼承與多態(tài)五、方法重載實現(xiàn)多態(tài)方法重載(overload)是面向對象編程多態(tài)特性的一種表現(xiàn)形式,具體是指在同一個類中定義多個名字相同但參數(shù)不同的方法。同一個方法名就是對外的統(tǒng)一接口,參數(shù)列表不同導致內部實現(xiàn)也不同。在Java中,重載方法必須滿足以下條件:方法名相同,包括大小寫方法的參數(shù)列表必須不同,可以是參數(shù)的類型、個數(shù)或順序不同方法的返回類型、修飾符可以相同,也可以不同任務1繼承與多態(tài)注意:“方法重載”與“方法重寫”從字面上看很相似,但意義大不相同。除參數(shù)列表的要求不一樣之外,方法重載可用于同一個類的所有方法,且一個方法在所在的類中可以被重載多次;但方法重寫只能用于繼承自父類的方法,且只能被子類重寫一次。案例——查看聯(lián)系人信息本案例通過重載構造方法,根據(jù)聯(lián)系人信息的完整程度輸出相應的聯(lián)系人信息。任務1繼承與多態(tài)運行結果六、對象上轉型如果一個類有很多子類,并且這些子類都重寫了父類中的某個方法,當把子類創(chuàng)建的對象的引用放到一個父類的對象中時,就得到了該對象的一個上轉型對象。由于不同的子類在重寫父類的方法時可能產生不同的行為,因此上轉型對象在調用這個方法時就具有多種形態(tài)。對象上轉型的目的是使父類可以調用子類重寫的父類的方法,但父類并不能調用子類中獨有的屬性和方法,也就是說子類會失去其特有的屬性和功能。由于向上轉型是從一個較具體的類轉換到較抽象的類,因此是安全的,程序會自動完成。任務1繼承與多態(tài)注意:不能直接將父類創(chuàng)建的對象的引用賦值給子類聲明的對象。如果子類重寫了父類的靜態(tài)方法,則子類對象的上轉型對象只能調用父類的靜態(tài)方法。案例——描述植物的開花時節(jié)本案例通過類轉型描述不同植物的開花時節(jié),演示使用類轉型簡化代碼,體現(xiàn)多態(tài)性的方法。任務1繼承與多態(tài)運行結果抽象類與接口任務2任務引入通過上一個任務的學習,小白了解了繼承和多態(tài)的原理和實現(xiàn)方法,但他并沒有淺嘗輒止。勤于思考的他想到了一個很實際的問題,如果繼承關系鏈較長,具體的子類好定義,最初的那個父類要包含所有子類的共性,又該如何定義呢?Java只支持單向繼承,如果有的子類需要繼承多個父類的方法,這種情況又該如何解決呢?知識準備在繼承關系中,父類應包含所有子類的共性。如果類的繼承關系鏈較長,則子類會越來越具體,反之,位于頂層的父類會越抽象、通用,有的甚至沒有具體的實現(xiàn)方法,以至于不能生成具體的實例。在Java中,這種不能描述一個具體的對象的類稱為抽象類,例如植物類。任務2抽象類與接口一、抽象類與抽象方法Java使用關鍵字abstract修飾抽象類。抽象類在繼承體系中常位于頂層,不能被實例化。抽象類中使用abstract修飾的方法稱為抽象方法。抽象類中可以包含成員變量、構造方法、抽象方法和具體方法中的全部項或部分項。任務2抽象類與接口注意:構造方法不能定義為抽象方法,用static修飾的類方法也不能定義為抽象方法。二、聲明與實現(xiàn)接口如果一個抽象類中的所有方法都是抽象方法,就可以使用接口來定義這個類。接口是一系列抽象方法的聲明集合,是一個完全抽象的類,沒有方法的實現(xiàn),具體實現(xiàn)由實現(xiàn)接口的類確定。因此這些方法可以在不同的地方被不同的類實現(xiàn),從而表現(xiàn)出不同的行為(功能)。接口使用關鍵字interface聲明,語法格式如下:[public]interface接口名稱[extends父接口名列表]{//接口體}接口的訪問權限可選值為public,如果省略,則使用默認的訪問權限。任務2抽象類與接口實例——計算形狀的周長和面積本實例聲明一個接口,定義計算形狀周長和面積的抽象方法,然后定義兩個類實現(xiàn)該接口,分別輸出圓形和三角形的周長和面積。任務2抽象類與接口運行結果內部類任務3小白在學習網(wǎng)友分享的Java項目時,發(fā)現(xiàn)有的程序代碼在一個類的內部竟然也定義了一個類。通過請教網(wǎng)友,他知道這種類稱為“內部類”。在Java中,內部類的主要作用是什么呢?如何定義內部類呢?知識準備在Java程序開發(fā)中,為了更加準確地描述結構體的作用,允許嵌套程序類,即在一個類的內部定義普通類、抽象類或接口,這些在類內部定義的類結構稱為內部類,內部類所在的類稱作外部類。根據(jù)內部類的位置、修飾符和定義的方式可以將內部類分為成員內部類、局部內部類、靜態(tài)內部類和匿名內部類。任務3內部類任務引入一、成員內部類所謂成員內部類,就是在一個類內部定義,作為類的成員的類。其中,OuterClass類是外部類,InnerClass類是內部類。成員內部類可用static、public、protected和private修飾,而外部類只能使用public或缺省修飾符。需要注意的是,成員內部類中不能定義靜態(tài)變量。在這里,可能有讀者會有疑問,為便于維護程序,通常一個.java文件中只定義一個類。任務3內部類提示:內部類在訪問外部類的成員時,可以采用“外部類.this.屬性”的形式,明確地表明訪問的屬性是外部類的屬性。案例——銷售部的組織結構本案例利用成員內部類表示某企業(yè)銷售部的組織結構。任務3內部類

運行結果二、局部內部類如果內部類定義在一個類的方法中或者一個作用域中,稱為局部內部類。它與成員內部類的區(qū)別在于,局部內部類可看作是方法中的一個局部變量,因此不能有public、protected、private以及static修飾符,其訪問也僅限于方法內或者該作用域內。任務3內部類案例——計算階乘本案例使用局部內部類計算給定整數(shù)的階乘。通過該案例演示定義局部內部類的方法。任務3內部類運行結果提示:本例中factorial()的返回值為long類型,因此在調用成員方法compute()并代入?yún)?shù)計算整數(shù)的階乘時,要注意計算結果的范圍。如果計算結果超出long類型的取值上限,顯示結果可能為負數(shù)或0。三、靜態(tài)內部類靜態(tài)內部類與成員內部類和局部內部類相似,也是定義在一個類結構中的類,只不過靜態(tài)內部類需要使用關鍵字static修飾。定義靜態(tài)內部類的語法格式如下:修飾符classOuterClass{staticclassInnerClass{//類體}}與類的靜態(tài)成員屬性類似,靜態(tài)內部類不需要依賴于外部類對象就可以實例化。在外部類或外部類的非靜態(tài)方法中創(chuàng)建靜態(tài)內部類對象的語法格式如下:內部類內部類對象=new內部類();任務3內部類案例——歡迎新同學本案例利用靜態(tài)內部類輸出歡迎新同學的文本信息,演示定義靜態(tài)內部類,以及利用靜態(tài)內部類訪問外部類的靜態(tài)成員和非靜態(tài)成員的方法。任務3內部類運行結果四、匿名內部類匿名內部類是在接口和抽象類的應用上發(fā)展起來的。所謂匿名內部類,就是沒有具體名稱的內部類,通常用于類體非常?。ㄖ挥泻唵螏仔校?,且只需要使用一次的類,作為參數(shù)傳遞給方法,用于實現(xiàn)一個接口或實現(xiàn)一個類。在Swing編程中,經(jīng)常使用這種方式綁定事件,編寫事件監(jiān)聽的代碼,不但方便,而且代碼容易維護。在Java中創(chuàng)建匿名內部類的語法格式如下:new接口名或抽象類名(){//類體};任務3內部類案例——自我介紹本案例首先創(chuàng)建一個接口,定義自我介紹的方法。然后使用匿名內部類實現(xiàn)接口,輸出自我介紹內容。任務3內部類運行結果五、Lambda表達式Lambda表達式是指應用在SAM(SingleAbstractMethod,含有一個抽象方法的接口)環(huán)境下的一種簡化定義形式,用于簡化匿名內部類的定義結構。在Java中,Lambda表達式的基本語法形式如下:(參數(shù),參數(shù),…)->{方法體}; //定義方法體(參數(shù),參數(shù),…)->語句; //直接返回結果其中,參數(shù)與要重寫的抽象方法的參數(shù)一一對應;方法體中具體實現(xiàn)抽象方法。任務3內部類案例——簡單的加法運算本案例從控制臺獲取要進行加法運算的兩個整數(shù),然后利用Lambda表達式輸出這兩個整數(shù)的計算結果。通過本案例演示Lambda表達式的使用方法。任務3內部類運行結果項目總結本章項目實戰(zhàn)將新建一個實體模型Goods存放商品的名稱、數(shù)量和入庫價格,并重載Goods的構造方法。然后在操作界面中使用類成員的setter()方法和getter()方法訪問商品對象的屬性。(1)復制并粘貼“進銷存管理系統(tǒng)V2.0”,在CopyProject對話框中修改項目名稱為“進銷存管理系統(tǒng)V3.0”,然后單擊Copy按鈕關閉對話框。(2)在PackageExplorer窗格中右擊項目名稱“進銷存管理系統(tǒng)V3.0”,從彈出的快捷菜單中選擇New→Package命令,新建一個名為model的包。(3)右擊model包,從彈出的快捷菜單中選擇New→Class命令,新建一個名為Go

溫馨提示

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

評論

0/150

提交評論