




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
接口和多態(tài)性第一頁,共四十四頁,編輯于2023年,星期日5.1多態(tài)性多態(tài)性概念:
在程序中同一符號或名字在不同情況下具有不同的語義解釋,其有兩種基本形式:
編譯時多態(tài)性:
在程序編譯時可確定的多態(tài)性,由重載機制實現(xiàn)運行時多態(tài)性:
指程序動態(tài)運行時才可確定的多態(tài)性,由繼承結合動態(tài)綁定實現(xiàn).第二頁,共四十四頁,編輯于2023年,星期日5.1多態(tài)性綁定
將一個名字與它的特性相關聯(lián)的過程.靜態(tài)綁定就是綁定過程在編譯時進行,動態(tài)綁定就是綁定過程在運行時進行.動態(tài)綁定
先設計一個類層次,子類重定義超類的某些方法,然后使用超類類型的對象引用調(diào)用這些方法,JVM根據(jù)這些對象引用的動態(tài)類型選擇所調(diào)用方法的版本,即如果該對象引用的是超類的對象實例,則調(diào)用超類定義的方法,如果引用的是子類的對象實例,則調(diào)用子類定義的方法.第三頁,共四十四頁,編輯于2023年,星期日publicclassSuperClass{publicvoidfirstMethod(){secondMethod();}publicvoidsecondMethod(){System.out.println(“SuperClass.secondMethod()”);}}publicclassSubClassextendsSuperClass{publicvoidsecondMethod(){System.out.println(“SubClass.secondMethod()”);}}則下述語句運行結果:SubClasssubObj=newSubClass();SuperClasssuperRef=subObj;superRef.firstMethod();輸出結果:SubClass.secondMethod()第四頁,共四十四頁,編輯于2023年,星期日5.2抽象類概念:
只能被繼承和擴充而不能創(chuàng)建自己的對象實例的類叫做抽象類。通常用做超類.通過關鍵字abstract進行標記將類聲明為抽象publicabstractclassDrawing{
publicabstractvoiddrawDot(intx,inty);publicvoiddrawLine(intx1,inty1,intx2,inty2){//drawusingthedrawDot()method//repeatedly.}}一個abstract類可以包含非抽象方法和變量抽象類只有被派生才能創(chuàng)建對象實例.
抽象方法只有被重定義才能給出其方法體.第五頁,共四十四頁,編輯于2023年,星期日例:某公司要編寫雇員工資支付程序,不同的雇員按不同的方式支付工資:
經(jīng)理(Manager)每月獲得固定工資;
銷售員(Salesman)每月基本工資+銷售提成;
一般工人(Worker)按每月工作的天數(shù)計算工資第六頁,共四十四頁,編輯于2023年,星期日Employee---------------------namegetName()computeSalary()Manager
---------------------namemonthSalarygetName()computeSalary()Salesman---------------------namebaseSalaryCommisionquantitygetName()computeSalary()Worker---------------------namedailySalarydaysgetName()computeSalary()第七頁,共四十四頁,編輯于2023年,星期日//Employee.javapublicabstractclassEmployee{privateStringname;publicEmployee(Stringname){=name;}publicStringgetName(){returnname;}//計算雇員月工資的抽象方法
publicabstractdoublecomputeSalary();}第八頁,共四十四頁,編輯于2023年,星期日classManagerextendsEmployee{privatedoublemonthSalary;publicManager(Stringname,doublemonthSalary){ super(name);//調(diào)用超類構造函數(shù)
this.monthSalary=monthSalary;}//重定義超類的抽象方法computeSalarypublicdoublecomputeSalary(){ returnmonthSalary;}}第九頁,共四十四頁,編輯于2023年,星期日classSalesmanextendsEmployee{privatedoublebaseSalary;//基本工資
privatedoublecommision;//每件產(chǎn)品提成額
privateintquantity;//銷售的產(chǎn)品數(shù)量
publicSalesman(Stringname,doublebaseSalary,doublecommision,intquantity){super(name);this.baseSalary=baseSalary;mision=commision;this.quantity=quantity;}publicdoublecomputeSalary(){ returnbaseSalary+commision*quantity;}}第十頁,共四十四頁,編輯于2023年,星期日classWorkerextendsEmployee{privatedoubledailySalary;//每天工資額
privateintdays;//每月工作的天數(shù)
publicWorker(Stringname,doubledailySalary,intdays){ super(name);this.dailySalary=dailySalary;this.days=days;}publicdoublecomputeSalary(){ returndailySalary*days;}}第十一頁,共四十四頁,編輯于2023年,星期日classDemo{publicstaticvoidmain(String[]args){//超類數(shù)組,記錄各種類型雇員
Employee[]data=newEmployee[4]; data[0]=newManager("Manager",10000); data[1]=newSalesman("Salesman",3000,200,12); data[2]=newWorker("WorkerZhang",200,25); data[3]=newWorker("WorkerLi",250,26); displaySalary(data);}publicstaticvoiddisplaySalary(Employee[]data){for(inti=0;i<data.length;i++){System.out.println("雇員"+data[i].getName()+"的月工資是"+data[i].computeSalary());}}}第十二頁,共四十四頁,編輯于2023年,星期日data數(shù)組是典型的多態(tài)數(shù)據(jù)結構(容器數(shù)據(jù)結構),可存放各種類型的雇員displaySalary()中調(diào)用data[i].computeSalary()會根據(jù)data[i]的動態(tài)類型調(diào)用相應雇員的computeSalary()這種動態(tài)特性使程序擴充十分方便如:將一般雇員再細分為計時雇員(DailyWorker)和計件雇員(PieceWorker),則可取消類Worker,重新派生兩個類DailyWorker和PieceWorker,重定義computeSalary方法并編譯即可,無需重新編譯displaySalary(),只要data數(shù)組中存放這兩種類型的雇員時,仍可正確計算其工資.程序總結:第十三頁,共四十四頁,編輯于2023年,星期日5.3接口JAVA程序的基本單位類(class)
接口(interface)-----------也是一種數(shù)據(jù)類型使用接口原因類+接口=>程序包(package)=>編寫大型java程序彌補了類的單繼承不能滿足功能擴充的不足第十四頁,共四十四頁,編輯于2023年,星期日5.3接口接口的概念類的接口
供他類可訪問的數(shù)據(jù)成員和方法成員類的實現(xiàn)接口
使用者與實現(xiàn)者之間的約束抽象---相當于純抽象類接口必須通過類來實現(xiàn)接口提供一個觀察類的角度一個類可以實現(xiàn)多個接口-------多角度觀察同一個事物一個接口類可以為多個類實現(xiàn)------同一個角度觀察不同事物JavaAPI標準接口
Serializable(可序列化的),Cloneable(可克隆的)MouseListener(鼠標監(jiān)聽者)LayoutManager(布局管理者)第十五頁,共四十四頁,編輯于2023年,星期日5.3接口接口的聲明//Controllable.javapublicinterfaceControllable{intOFF=0;//靜態(tài)變量,要初始化
intON=1;voidsetPower(inton_or_off);booleanisPowerOn();}接口數(shù)據(jù)成員只能是公有的靜態(tài)常量數(shù)據(jù),可用public,static,final來修飾接口成員方法只能是公有抽象方法,只能用public,abstract來修飾第十六頁,共四十四頁,編輯于2023年,星期日Pet示例假設有一個超類FourLegged,Cat/Duck/Dog都繼承它又同時要擴展Pet用C++,可以多重繼承用JAVA接口實現(xiàn)示例第十七頁,共四十四頁,編輯于2023年,星期日interfacePet{ abstractpublicvoidspeak();}classDogimplementsPet{ publicvoidspeak() { System.out.println("Woof"); }}第十八頁,共四十四頁,編輯于2023年,星期日classCatimplementsPet{ publicvoidspeak() { System.out.println("Meow"); }}classDuckimplementsPet{ publicvoidspeak() { System.out.println("Quack"); }}第十九頁,共四十四頁,編輯于2023年,星期日publicclassAnimals{ publicstaticvoidmain(String[]agrs) { PetmyPets[]=newPet[4]; myPets[0]=newDuck(); myPets[1]=newCat(); myPets[2]=newDuck(); myPets[3]=newDog(); for(intindex=0;index<4;index++) myPets[index].speak(); }}第二十頁,共四十四頁,編輯于2023年,星期日接口的使用聲明希望一個或更多個類實現(xiàn)的方法展示對象的編程接口而不顯示類的內(nèi)部主體結構捕捉無關聯(lián)的類之間的相似性而無須強制建立類關系通過聲明一個實現(xiàn)幾個接口的類來模仿多重繼承第二十一頁,共四十四頁,編輯于2023年,星期日電視示例publicinterfaceControllable{intOFF=0;//靜態(tài)變量,要初始化
intON=1;voidsetPower(inton_or_off);booleanisPowerOn();}第二十二頁,共四十四頁,編輯于2023年,星期日classTelevisionimplementsControllable{privateintpower=Controllable.OFF;privateStringtradeMark=“”;publicTelevision(Stringmark){tradeMark=mark;}publicStringgetTrademark(){returntradeMark;}publicvoidsetPower(inton_or_off){if(on_or_off==Controllable.ON){System.out.println(“請開啟電視電源….”);power=Controllable.ON;}elseif(on_or_off==Controllable.OFF){System.out.println(“請開啟電視電源….”);power=Controllable.ON;}}}第二十三頁,共四十四頁,編輯于2023年,星期日publicbooleanisPower(){return(power==Controllable.ON);}}classControllableDemo{publicstaticvoidmain(){Televisionobj=newTelevision(“創(chuàng)維”);Controllableref=obj;ref.setPower(Controllable.ON);if(ref.isPowerOn())System.out.println(((Television)ref).getTradeMark()+”牌電視的電源已經(jīng)開啟”);elseSystem.out.println(((Television)ref).getTradeMark()+”牌電視的電源已經(jīng)關閉”);}}第二十四頁,共四十四頁,編輯于2023年,星期日5.3接口接口的繼承
publicinterfaceTVControllerextendsVideoController,AudioController{…...}接口與其祖先接口中含有同名方法時:同形參同返回類型的方法看成同一個方法不同形參的方法看成互為重載的不同方法
同形參不同返回類型的方法語法錯誤第二十五頁,共四十四頁,編輯于2023年,星期日publicinterfaceSuperInterface{intmethodOne(intx);intmethodTwo(intx);}publicinterfaceSubInterfaceOneextendssuperInterface{intmethodOne(intx);intmethodTwo(Stringname);StringmethodTwo(intx);//語法錯誤
}第二十六頁,共四十四頁,編輯于2023年,星期日第二十七頁,共四十四頁,編輯于2023年,星期日
4.4包的創(chuàng)建和使用第四章java
中的對象、類、包和接口定義:
包是一組相關的類或接口的集合,它提供了訪問保護和名字空間管理。Java編譯器使用文件系統(tǒng)目錄來保存包。第二十八頁,共四十四頁,編輯于2023年,星期日
4.4包的創(chuàng)建和使用第四章java
中的對象、類、包和接口使用包的好處:程序員能很容易確定同一包中的類是相互關聯(lián)的。
程序員能很方便地了解到在哪里可以找到能完成特定功能的類由于每個包都創(chuàng)建了一個名字空間,個人創(chuàng)建的類名不會和其它包中的類名名發(fā)生沖突可以使同一包中的類彼此不加限制地訪問,而同時對其它包中的類提供訪問控制。第二十九頁,共四十四頁,編輯于2023年,星期日//ClassOne.javapackagepackageOne;publicclassClassOne{publicstaticvoidmain(String[]args){System.out.println(“類ClassOne屬于程序包packageOne!”);}}編譯:javacClassOne.java運行:①javaClassOne()②javapackageOne.ClassOne(使用全名)③在當前目錄下建packageOne子目錄,并將ClassOne.class文件拷入④javac-d.ClassOne.java自動建packageOne子目錄并存入文件ClassOne.class第三十頁,共四十四頁,編輯于2023年,星期日
4.4包的創(chuàng)建和使用第四章java
中的對象、類、包和接口1.創(chuàng)建包 格式:packagepkg1[.pkg2[.pkg3]];
package語句必須放在原文件的開始處。例如:java.iojava.utiljava.lang java.appletjavax.swingpackagegraphics;publicclassCircle{...}
第三十一頁,共四十四頁,編輯于2023年,星期日
4.4包的創(chuàng)建和使用第四章java
中的對象、類、包和接口1.創(chuàng)建包說明:package的作用域是整個源文件如果在同一個源文件中定義了多個類,最多僅可以有一個類用public修飾,且源文件名必須與該類名相同當未使用package語句時,類和接口放在無名缺省包里包的命名習慣:將Internet域名作為包名例如:pany.region.package.第三十二頁,共四十四頁,編輯于2023年,星期日
4.4包的創(chuàng)建和使用第四章java
中的對象、類、包和接口2.包的使用包中的所有類中只有public類能被包外部的類訪問。有三種方法訪問包中的類:1)使用長名字引用包中的公共成員即在類名前注明包名例graphics.Rectanglegraphics.RectanglemyRect=newgraphics.Rectangle();第三十三頁,共四十四頁,編輯于2023年,星期日
4.4包的創(chuàng)建和使用第四章java
中的對象、類、包和接口2.包的使用引進包的公共成員
在文件的開始處使用import語句將指定的成員引進到當前文件中.格式:importpkg1[.pkg2].類名例importgraphics.Circle;CirclemyCircle=newCircle();第三十四頁,共四十四頁,編輯于2023年,星期日
4.4包的創(chuàng)建和使用第四章java
中的對象、類、包和接口2.包的使用3)引進整個包
使用import語句引進包中的所有類和接口格式:importpkg1[.pkg2].*例importgraphics.*;現(xiàn)在可以使用短名字來引用類graphics包中的所有類.CirclemyCircle=newCircle();RectanglemyRectangle=newRectangle();第三十五頁,共四十四頁,編輯于2023年,星期日
4.4包的創(chuàng)建和使用第四章java
中的對象、類、包和接口3.源文件和類文件的管理
JDK利用文件系統(tǒng)的層次結構來管理源文件和類文件。源文件和類文件所在的目錄名應與其中的類所在的包名對應,編譯器和解釋器按此機制來查找類。如:
第三十六頁,共四十四頁,編輯于2023年,星期日
4.4包的創(chuàng)建和使用第四章java
中的對象、類、包和接口3.源文件和類文件的管理
第三十七頁,共四十四頁,編輯于2023年,星期日
4.4包的創(chuàng)建和使用第四章java
中的對象、類、包和接口
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 11856.1-2025烈性酒質(zhì)量要求第1部分:威士忌
- GB 19081-2025飼料加工系統(tǒng)粉塵防爆安全規(guī)范
- 勞動合同范本 派遣
- 養(yǎng)殖場清糞車購銷合同范本
- 區(qū)域銷售協(xié)議合同范本醫(yī)藥
- 包裝印刷公司采購合同范本
- 買宅地合同范例
- 上海住房合同范本
- 個人與團隊提成合同范本
- 線上按摩技師合同范本
- 部編版小學(2024版)小學道德與法治一年級下冊《有個新目標》-第一課時教學課件
- 稅法(第5版) 課件 第13章 印花稅
- 2024-2025學年廣州市高二語文上學期期末考試卷附答案解析
- 咖啡店合同咖啡店合作經(jīng)營協(xié)議
- 2025年山東鋁業(yè)職業(yè)學院高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- 全套電子課件:技能成就夢想
- 2024年教育公共基礎知識筆記
- 2025年江蘇農(nóng)林職業(yè)技術學院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 異構數(shù)據(jù)融合技術-深度研究
- 北京市朝陽區(qū)2024-2025學年七年級上學期期末考試數(shù)學試卷(含答案)
- 2024年湖南汽車工程職業(yè)學院單招職業(yè)技能測試題庫標準卷
評論
0/150
提交評論