Java語言程序設計(第2版)教學設計第05章 教學設計_第1頁
Java語言程序設計(第2版)教學設計第05章 教學設計_第2頁
Java語言程序設計(第2版)教學設計第05章 教學設計_第3頁
Java語言程序設計(第2版)教學設計第05章 教學設計_第4頁
Java語言程序設計(第2版)教學設計第05章 教學設計_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

學IT有疑問,就找千問千知千里尋他眾百度,鋒自苦寒磨礪出千鋒教育Java語言程序設計(第2版)教學設計課程名稱:Java語言程序設計(第2版)_______授課年級:___________________________授課學期:___________________________教師姓名:___________________________2020年03月01日課程名稱第5章面向對象(下)計劃學時4學時內容分析本章主要介紹類的繼承、final關鍵字、抽象類和接口、多態(tài)、包、Lambda表達式教學目標與教學要求要求學生理解繼承的概念、掌握final關鍵字的使用、熟練掌握抽象類和接口的使用、理解多態(tài)的概念、掌握JDK8中Lambda表達式的使用教學重點final關鍵字、抽象類和接口、多態(tài)、包、Lambda表達式教學難點final關鍵字、抽象類和接口、多態(tài)、包、Lambda表達式教學方式課堂講解及ppt演示教學過程第一課時(類的繼承、final關鍵字、抽象類和接口、多態(tài))內容回顧回顧上節(jié)內容,引出本課時主題。上節(jié)已經介紹了面向對象(上),通過上一章的學習,相信大家對Java語言面向對象的基本知識已經有了初步了解,本章將介紹Java面向對象的另外兩大特征:繼承和多態(tài)。此外,本章還介紹final關鍵字、抽象類和接口、包、訪問控制。明確學習目標能夠掌握繼承的概念能夠掌握重寫父類方法能夠掌握super關鍵字能夠掌握final關鍵字修飾類能夠掌握final關鍵字修飾方法能夠掌握final關鍵字修飾變量能夠掌握抽象類能夠掌握接口能夠掌握接口的實現(xiàn)能夠掌握接口的繼承能夠掌握抽象類和接口的關系能夠掌握多態(tài)的概念能夠掌握對象的類型轉換能夠掌握Object類知識講解繼承的概念現(xiàn)實生活中,繼承是指下一代人繼承上一代人遺留的財產,即實現(xiàn)財產重用。在面向對象程序設計中,繼承實現(xiàn)代碼重用,即在已有類的基礎上定義新的類,新的類能繼承已有類的屬性與行為,并擴展新的功能,而不需要把已有類的內容再寫一遍。已有的類被稱為父類或基類,新的類被稱為子類或派生類。例如交通工具與公交車就屬于繼承關系,公交車擁有交通工具的一切特性,但同時又擁有自己獨有的特性。在Java中,子類繼承父類的語法格式如下:class子類名extends父類名{屬性和方法}重寫父類方法在繼承關系中,子類從父類中繼承了可訪問的方法,但有時從父類繼承下來的方法不能完全滿足子類需要,例如上例中,如果要求父類與子類中的say()方法輸出不同內容,這時就需要在子類的方法里修改父類的方法,即子類重新定義從父類中繼承的成員方法,這個過程稱為方法重寫或覆蓋。在進行方法重寫時必須考慮權限,即被子類重寫的方法不能擁有比父類方法更加嚴格的訪問權限,如例所示。//定義父母類classParent{ protectedvoidsay(){ System.out.println("父輩"); }}//定義子女類繼承自父母類classChildextendsParent{ publicvoidsay(){ System.out.println("子女"); }}publicclassTestOverride{ publicstaticvoidmain(String[]args){ //創(chuàng)建Child對象 Childc=newChild(); c.say(); }}super關鍵字當子類重寫父類方法后,子類對象將無法訪問父類被重寫的方法。如果在子類中需要訪問父類的被重寫方法,可以通過super關鍵字來實現(xiàn),其語法格式如下:super.成員變量super.成員方法([實參列表])final關鍵字修飾類使用final關鍵字修飾的類稱為最終類,表示不能再被其他的類繼承,如Java中的String類。接下來演示final修飾類,如例所示。//使用final關鍵字修飾類finalclassParent{}//繼承final類classChildextendsParent{}publicclassTestFinalClass{ publicstaticvoidmain(String[]args){ //創(chuàng)建Child對象 Childc=newChild(); }}final關鍵字修飾方法使用final關鍵字修飾的方法,稱為最終方法,表示子類不能重寫此方法,接下來演示final修飾方法,如例所示。classParent{ //final關鍵字修飾方法 publicfinalvoidsay(){ System.out.println("final修飾say()方法"); }}classChildextendsParent{ //重寫父類方法 publicvoidsay(){ System.out.println("重寫父類say()方法"); }}publicclassTestFinalFunction{ publicstaticvoidmain(String[]args){ //創(chuàng)建Child對象 Childc=newChild(); c.say(); }}final關鍵字修飾變量使用final關鍵字修飾的變量,稱為常量,只能被賦值一次。如果再次對該變量進行賦值,則程序在編譯時會報錯,如例所示。packagetest;publicclassTestFinalLocalVar{ publicstaticvoidmain(String[]args){ finaldoublePI=3.14; //定義并初始化 PI=3.141592653; //重新賦值 }}抽象類Java中可以定義不含方法體的方法,方法的方法體由該類的子類根據實際需求去實現(xiàn),這樣的方法稱為抽象方法(abstractmethod),包含抽象方法的類必須是抽象類(abstractclass)。Java中提供了abstract關鍵字,表示抽象的意思,用abstract修飾的方法,稱為抽象方法,是一個不完整的方法,只有方法的聲明,沒有方法體。用abstract修飾的類,稱為抽象類,抽象類可以不包含任何抽象方法,具體示例如下://用abstract修飾抽象類abstractclassParent{ //abstract修飾抽象方法,只有聲明,沒有實現(xiàn) publicabstractvoidsay();}接口接口是全局常量和公共抽象方法的集合,接口可被看作一種特殊的類,也屬于引用類型。每個接口都被編譯成獨立的字節(jié)碼文件。Java提供interface關鍵字,用于聲明接口,其語法格式如下:interface接口名{ 全局常量聲明 抽象方法聲明}接下來演示interface關鍵字的作用,具體示例如下://用interface聲明接口interfaceParent{ Stringname; //等價于publicstaticfinalStringname; voidsay(); //等價于publicabstractvoidsay();}接口中定義的變量和方法都包含默認的修飾符,其中定義的變量默認聲明為“publicstaticfinal”,即全局常量。另外定義的方法默認聲明為“publicabstract”,即抽象方法。接口的實現(xiàn)與抽象類相似,接口中也包含抽象方法。因此,不能直接實例化接口,即不能使用new創(chuàng)建接口的實例。Java提供implements關鍵字,用于實現(xiàn)多個接口,具體示例如下:class類名implements接口列表{ 屬性和方法}接口的繼承在Java中使用extends關鍵字來實現(xiàn)接口的繼承,它與類的繼承類似,當一個接口繼承父接口時,該接口會獲得父接口中定義的所有抽象方法和常量,但又與類的繼承不同,接口支持多重繼承,即一個接口可以繼承多個父接口。其語法格式如下:interface接口名extends接口列表{全局常量聲明抽象方法聲明}抽象類和接口的關系抽象類與接口是Java語言中對于抽象類定義進行支持的兩種機制,兩者非常相似,初學者經?;煜@兩個概念,兩者的相同點可以歸納為三點:都包含抽象方法。都不能被實例化。都是引用類型。表列出了兩者之間的區(qū)別。區(qū)別點接口抽象類含義接口通常用于描述一個類的外圍能力,而不是核心特征。類與接口之間的是-able或者cando的關系。抽象類定義了它的后代的核心特征。派生類與抽象類之間是is-a的關系。方法接口只提供方法聲明。抽象類可以提供完整方法、缺省構造方法以及用于覆蓋的方法聲明。變量只包含publicstaticfinal常量,常量必須在聲明時初始化。可以包含實例變量和靜態(tài)變量。多重繼承一個類可以繼承多個接口。一個類只能繼承一個抽象類。實現(xiàn)類類可以實現(xiàn)多個接口。類只從抽象類派生,必須重寫。適用性所有的實現(xiàn)只是共享方法簽名。所有實現(xiàn)大同小異,并且共享狀態(tài)和行為。簡潔性接口中的常量都被默認為publicstaticfinal,可以省略。接口中的方法被默認為publicabstract。可以在抽象類中放置共享代碼。必須用abstract顯式聲明方法為抽象方法。添加功能如果為接口添加一個新的方法,則必須查找所有實現(xiàn)該接口的類,并為它們逐一提供該方法的實現(xiàn)。如果為抽象類提供一個方法,可以選擇提供一個缺省的實現(xiàn),那么所有已存在的代碼不需要修改就可以繼續(xù)工作??傮w來說,抽象類和接口都用于為對象定義共同的行為,兩者在很大程度上是可以互相替換的,但由于抽象類只允許單繼承,所以當兩者都可以使用時,優(yōu)先考慮接口,只有當需要定義子類的行為,并為子類提供共性功能時才考慮選用抽象類。多態(tài)的概念多態(tài)是指同一操作作用于不同的對象,可以有不同的解釋,產生不同的執(zhí)行結果。在Java程序中,多態(tài)是指把類中具有相似功能的不同方法使用同一個方法名實現(xiàn),從而可以使用相同的方式來調用這些具有不同功能的同名方法。接下來通過一個案例來演示多態(tài)的實現(xiàn),示例代碼參考教材5.4.1節(jié)。對象的類型轉換對象的類型轉換是指可以將一個對象的類型轉換成繼承結構中的另一種類型。類型轉換分為兩種,具體如下:向上轉型,是從子類到父類的轉換,也稱隱式轉換。向下轉型,是從父類到子類的轉換,也稱顯式轉換。Object類Java中提供了一個Object類,是所有類的父類,如果一個類沒有顯式地指定繼承類,則該類的父類默認為Object。例如,下面兩個類的定義是一樣的:在Object類中提供了很多方法,接下來分別對其中的方法進行解釋,如表所示。方法聲明功能描述publicStringtoString()返回描述該對象的字符串publicBooleanequals(Objecto)比較兩個對象是否相等publicinthashCode()返回對象的哈希值本章暫時只對toString()和equals方法進行講解,而hashCode()方法在Java集合中再詳細講解。1.toString()方法調用一個對象的toString()方法會默認返回一個描述該對象的字符串,它由該對象所屬類名、@和對象十六進制形式的內存地址組成,示例代碼參考教材5.4.3節(jié)。2.equals()方法equals()方法是用于測試兩個對象是否相等,示例代碼參考教材5.4.3節(jié)。第二課時(多態(tài)、包、Lambda類)內容回顧回顧上節(jié)內容,引出本課時主題。上節(jié)已經介紹了繼承的概念、重寫父類方法、super關鍵字、final關鍵字修飾類、final關鍵字修飾方法、final關鍵字修飾變量、抽象類、接口、接口的實現(xiàn)、接口的繼承、抽象類和接口的關系、多態(tài)的概念、對象的類型轉換、Object類,下面將介紹設計模式——工廠設計模式、設計模式——代理設計模式、包的定義與使用、import語句、Java的常用包、給Java應用程序打包、Lambda表達式語法、Lambda表達式案例、函數式接口和方法引用與構造器引用。明確學習目標能夠掌握設計模式——工廠設計模式能夠掌握設計模式——代理設計模式能夠掌握包的定義與使用能夠掌握import語句能夠掌握Java的常用包能夠掌握給Java應用程序打包能夠掌握Lambda表達式語法能夠掌握Lambda表達式案例能夠掌握函數接口能夠掌握方法引用與構造器引用知識講解設計模式——工廠設計模式工廠模式(Factory)主要用來實例化有共同接口的類,它可以動態(tài)決定應該實例化哪一個類,不必事先知道每次要實例化哪一個類。工廠模式主要有三種形態(tài):簡單工廠模式、工廠方法模式和抽象工廠模式。接下來分別對這三種形態(tài)進行講解。1.簡單工廠模式(SimpleFactoryPattern)簡單工廠模式又稱靜態(tài)工廠方法,它的核心是類中包含一個靜態(tài)方法,該方法用于根據參數來決定返回實現(xiàn)同一接口不同類的實例,示例代碼參考教材5.4.4節(jié)。2.工廠方法模式(FactoryMethodPattern)工廠方法模式為工廠類定義了接口,用多態(tài)來削弱了工廠類的職責,示例代碼參考教材5.4.4節(jié)。3.抽象工廠模式(AbstractFactoryPattern)抽象工廠用于意在創(chuàng)建一系列互相關聯(lián)或互相依賴的對象,示例代碼參考教材5.4.4節(jié)。設計模式——代理設計模式代理模式是指給某一個對象提供一個代理,并由代理對象控制對原有對象的引用。如生活中,求職者找工作(真實操作),可以讓獵頭幫忙去找(代理操作),獵頭把最終結果反饋給求職者。無論是真實操作還是代理操作,目的都是一樣的,求職者只關心最終結果,而不關心過程,示例代碼參考教材5.4.5節(jié)。包的定義與使用包(package)是Java提供的一種區(qū)別類的名字空間的機制,是類的組織方式,是一組相關類和接口的集合,它提供了訪問權限和命名的管理機制。使用package語句聲明包,其語法格式如下:package包名使用時需要注意以下四點:包名中字母一般都要小寫。包的命名規(guī)則:將公司域名反轉作為包名。package語句必須是程序代碼中的第一行可執(zhí)行代碼。package語句最多只有一句。包與文件目錄類似,可以分成多級,多級之間用“.”符號進行分隔,具體示例如下:packagecom.l000phone.www;如果在程序中已聲明了包,就必須將編譯生成的字節(jié)碼文件保存到與包名同名的子目錄中,可以使用帶包編譯命令,具體示例如下:javac-d.Source.java其中,“-d”表示生成以package定義為準的目錄,“.”表示在當前所在的文件夾中生成。編譯器會自動在當前目錄下建立與包名同名的子目錄,并將生成的.class文件自動保存到與包名同名的子目錄下。import語句在實際開發(fā)中,項目都是分模塊開發(fā),對應模塊包中的類,完成相應模塊的功能。但有時模塊之間的類要相互調用。例如,通常開發(fā)中都是將業(yè)務邏輯層的接口和實現(xiàn)放在不同包中,在eclipse中新建一個chapter05項目,在項目的src根目錄下新建service和service.impl兩個包,在service包中創(chuàng)建UserService接口,在service.impl包下創(chuàng)建UserServiceImpl類,示例代碼參考教材5.5.2節(jié)。Java的常用包Java的核心類都放在java包及其子包下,Java擴展的類都放在javax包及其子包下,接下來了解一下常用的開發(fā)包,如表所示。包名功能描述java.lang核心包,如String、Math、System類等,無需使用import手動導入,系統(tǒng)自動導入java.util工具包,包含工具類、集合類等,如Arrays、List和Set等包含網絡編程的類和接口java.io包含輸入、輸出編程相關的類和接口java.text包含格式化相關的類java.sql數據庫操作包,提供了各種數據庫操作的類和接口java.awt包含抽象窗口工具集(abstractwindowtoolkits)相關類和接口,主要用于構建圖形用戶界面(GUI)java.swing包含圖形用戶界面相關類和接口給Java應用程序打包在實際開發(fā)中,通常會將一些類提供給別人使用,直接提供字節(jié)碼文件會比較麻煩,所以一般會將這些類文件打包成jar文件,以供別人使用。jar文件的全稱是JavaArchiveFile,意思就是Java歸檔文件,也稱為jar包。將一個jar包添加到classpath環(huán)境變量中,Java虛擬機會自動解壓jar包,根據包名所對應的目錄結構去查找所需的類。通常使用jar命令來打包,可以把一個或多個路徑壓縮成一個jar文件。jar命令是在JDK安裝目錄下的bin目錄中,直接在命令行中輸入jar命令,即可查看jar命令的提示信息,如圖所示。jar命令主要參數如下:c:創(chuàng)建新的文檔。v:生成詳細的輸出信息。f:指定歸檔的文件名。Lambda表達式語法Java8中引入了一個新的操作符,“->”可以稱之為箭頭操作符或者Lambda操作符。當使用Lambda表達式進行代碼編寫時就需要使用這個操作符。箭頭操作符將Lambda表達式分成左右兩部分,在操作符的左側代表著Lambda表達式的參數列表(接口中抽象方法的參數列表),在操作符的右側代表著Lambda表達式中所需執(zhí)行的功能(是對抽象方法的具體實現(xiàn))。Lambda表達式的語法格式如下:(parameters)->expression或(parameters)->{statements;}上述語法還可以寫成以下幾種格式:無參數無返回值:()->具體實現(xiàn)有一個參數無返回值:(x)->具體實現(xiàn)或x->具體實現(xiàn)有多個參數,有返回值,并且Lambda體中有多條語句:(x,y)->{具體實現(xiàn)}若方法體只有一條語句,那么大括號和return都可以省略。注意:Lambda表達式的參數列表的參數類型可以省略不寫,可以進行類型推斷。在Java8之后可以使用Lambda表達式來表示接口的一個實現(xiàn),在Java8之前通常是使用匿名類實現(xiàn)的。Lambda表達式案例接下來通過代碼講解Lambda表達式的使用,編寫一個能夠實現(xiàn)加、減、乘、除功能且能夠實現(xiàn)輸出字符串功能的案例。首先chapter05項目的根目錄下創(chuàng)建lambda包,在該包下創(chuàng)建MathOne接口,該接口中定義一個帶有兩個參數的operation方法,示例代碼參考教材5.6.2節(jié)。函數式接口Ⅰ.@FunctionalInterface注解Java8為函數式接口引入了一個新注解@FunctionalInterface,主要用于編譯級錯誤檢查,加上該注解,當編寫的接口不符合函數式接口定義的時候,編譯器就會報錯。函數式接口(FunctionalInterface)是指僅包含一個抽象方法,但是可以包含多個非抽象方法(比如,靜態(tài)方法、默認方法)的接口。Ⅱ.JDK提供的函數式接口函數式接口可以對現(xiàn)有的函數友好地支持Lambda,JDK1.8之前已有很多函數式接口,JDK1.8新增加的函數接口中包含了很多類,用來支持Java的函數式編程,新增的java.util.function包中的函數式接口參考教材5.6.3節(jié)。Ⅲ.函數式接口實例接下來以Predicate<T>接口為例,講解函數式接口的使用方法,實現(xiàn)對集合中的元素按條件進行篩選的功能。首先創(chuàng)建Test2類,并在該類中定義一個List集合。由表5.4可知Predicate<T>接口接受一個參數,返回一個布爾值結果,因此,返回一個布爾值結果,接下來演示函數式接口,具體代碼參考教材5.6.3節(jié)。方法引用與構造器引用當要傳遞給Lambda體的操作,已經有實現(xiàn)的方法了,可以使用方法引用,可以理解為方法引用是Lambda表達式的另外一種表現(xiàn)形式。實現(xiàn)抽象方法的參數列表,必須與引用方法的參數列表保持一致。方法引用的語法:對象::實例方法、類::靜態(tài)方法、類::實例方法。構造器引用的語法:ClassName::new。第一種語法:對象::實例方法名publicvoidTe

溫馨提示

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

評論

0/150

提交評論