《Java程序設(shè)計》課件-項目五 類的封裝、繼承與多態(tài)_第1頁
《Java程序設(shè)計》課件-項目五 類的封裝、繼承與多態(tài)_第2頁
《Java程序設(shè)計》課件-項目五 類的封裝、繼承與多態(tài)_第3頁
《Java程序設(shè)計》課件-項目五 類的封裝、繼承與多態(tài)_第4頁
《Java程序設(shè)計》課件-項目五 類的封裝、繼承與多態(tài)_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

項目五類的封裝、繼承與多態(tài)Java程序設(shè)計面向?qū)ο笤O(shè)計的三大特征Java程序設(shè)計封裝繼承多態(tài)抽象(類與對象的概念)封裝Java程序設(shè)計封裝是面向?qū)ο缶幊痰暮诵乃枷耄瑢ο蟮膶傩院托袨榉庋b起來,而將對象的屬性和行為封裝起來的載體就是類,類通常對客戶隱藏其實現(xiàn)細節(jié),這就是封裝的思想。用戶使用計算機,只需要用手單擊鍵盤就可以實現(xiàn)一些功能,用戶無需知道計算機內(nèi)部是如何工作的注意:類只要提供了方法,它的具體過程無需考慮,直接調(diào)用就可以了,比如輸出類方法封裝的優(yōu)勢1、良好的封裝能夠減少耦合。2、類內(nèi)部的結(jié)構(gòu)可以自由修改。3、可以對成員進行更精確的控制。4、隱藏信息,實現(xiàn)細節(jié)。Java程序設(shè)計封裝的過程Java程序設(shè)計封裝的過程Java程序設(shè)計提示:能根據(jù)提示語句進行查錯改錯封裝的過程Java程序設(shè)計任務(wù):創(chuàng)建一個封裝的會員類思路:

1、創(chuàng)建一個封裝的會員類,有四個屬性privateintcustNo;privateStringcustName;privateStringcustBir;privateintcustScore;

2、并創(chuàng)建四個屬性的getter/setter方法

3、創(chuàng)建會員信息的顯示方法custshow()

4、創(chuàng)建測試類進行測試

繼承Java程序設(shè)計繼承是面向?qū)ο蟪绦蛟O(shè)計方法中實現(xiàn)軟件重用的一種重要手段,通過繼承可以更有效地組織程序結(jié)構(gòu),明確類之間的關(guān)系,并充分利用已有的類為基礎(chǔ),進而派生出新的類,而不需編寫相同的程序代碼,以此來通過繼承實現(xiàn)代碼的復(fù)用,從而完成更復(fù)雜的設(shè)計、開發(fā)。繼承Java程序設(shè)計

當處理一個問題時,可以將一些有用的類保留下來,這些類通常有相同的屬性,甚至相同的方法,當遇到同樣問題的時候可以拿來復(fù)用。例如鴿子具有鳥類相同的屬性和行為,便可以在創(chuàng)建鴿類的時候?qū)ⅧB類拿來復(fù)用,并且保留鳥類具有的屬性和行為。鳥類家鴿信鴿白麻雀野麻雀家麻雀繼承的概念Java程序設(shè)計

面向?qū)ο蟪绦蛟O(shè)計中的繼承是利用現(xiàn)有的類創(chuàng)建新類的過程,現(xiàn)有的類稱作基類(或父類),創(chuàng)建的新類稱作派生類(子類)。

由圖可得到由繼承而得到的類稱為子類,被繼承的類稱為父類(超類)。派生類繼承基類的狀態(tài)和行為,并根據(jù)需要增加它自己的新的狀態(tài)和行為。注意:①子類可以繼承父類中可訪問的【訪問權(quán)限設(shè)定為public,protected或無權(quán)限修飾符(若同包)】成員變量和方法。但是不能繼承訪問權(quán)限為private的成員變量和方法。②一個類只能有一個直接父類。③父類包括所有直接或間接被繼承的類。④Java不支持多重繼承(子類只能有一個父類)。類的樹形結(jié)構(gòu)Java程序設(shè)計Java的類按繼承關(guān)系形成樹形結(jié)構(gòu)。這個樹形結(jié)構(gòu)中,根節(jié)點是Object類(Object是java.lang包中的類),即Object是所有類的祖先類。一個類可以有多個子類,也可以沒有子類,但它必定有一個父類(Object除外),換句話說,除了Object類,每個類都有且僅有一個父類,一個類可以有多個或零個子類。繼承的定義Java程序設(shè)計定義:

繼承主要通過關(guān)鍵字extends來定義一個類的子類,格式如下:class子類名extends父類名{…}舉例:publicclassFather{ //父類的屬性 floatweight,height; Stringhead; //父類的方法

voidspeak(Strings) {System.out.println(s); }}//定義一個子類son繼承于父類FatherpublicclassSonextendsFather{ //定義子類自己的屬性 Stringhand,foot; publicstaticvoidmain(String[]args){ //對子類創(chuàng)建對象s Sons=newSon();//繼承父類的weight屬性

s.weight=140;

System.out.println(s.weight);//執(zhí)行父類的speak()方法

s.speak("你好!"); }

}任務(wù)實施Java程序設(shè)計任務(wù)描述:員工分為普通員工、售貨員、部門經(jīng)理三種角色;所有的員工屬性包括姓名、性別、年齡、部門、基本工資、地址、電話等,根據(jù)角色的不同,員工工資的計算機方式也不同,具體為:

普通員工:基本工資+崗位工資(600)+考勤(300)售貨員:基本工資+崗位工資(600+銷售額*0.02)+考勤(300)部門經(jīng)理:基本工資+崗位工資(1000)+考勤(300)多態(tài)Java程序設(shè)計多態(tài)性是指同名的不同方法在程序中共存。即為同一個方法定義幾個版本,運行時根據(jù)不同情況執(zhí)行不同的版本。調(diào)用者只需使用同一個方法名,系統(tǒng)會根據(jù)不同情況,調(diào)用相應(yīng)的不同方法,從而實現(xiàn)不同的功能。多態(tài)性又被稱為“一個名字,多個方法”。生活中的多態(tài):不同類型的打印機打印效果不同打印機打印黑白打印機彩色打印機打印效果為黑白打印效果為彩色多態(tài)的概念Java程序設(shè)計

多態(tài)是指把類中具有相似功能的不同方法使用同一個方法名來實現(xiàn),從而可以使用相同的方式來調(diào)用這些具有不同功能的同名方法。簡單來說就是多態(tài)是同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力。同一個方法可以根據(jù)上下文使用不同的定義能力,在多態(tài)中允許程序中出現(xiàn)重名現(xiàn)象。比如說在我們操作電腦的時候,同樣是按下F1鍵這個動作,對于在Flash界面下彈出的就是AS3的幫助文檔;對于Word下彈出的就是Word幫助;對于Windows下彈出的就是Windows幫助和支持。所以同一個事件發(fā)生在不同的對象上會產(chǎn)生不同的結(jié)果。這就是多態(tài)。多態(tài)的表現(xiàn)形式Java程序設(shè)計方法重載:在一個類中,允許多個方法使用同一個名字,但方法的參數(shù)不同,完成的功能也不同。也成為了靜態(tài)綁定。成員覆蓋:在子類中直接定義和父類相同的屬性和方法,子類與父類允許具有相同的變量名稱,但數(shù)據(jù)類型不同,允許具有相同的方法名稱,但完成的功能不同。也稱為動態(tài)綁定??梢钥吹揭粋€類中成員方法的重載,也就是一個靜態(tài)綁定,系統(tǒng)會在你編譯的時候根據(jù)你調(diào)用的方法參數(shù)列表來動態(tài)的決定調(diào)用哪一個函數(shù)可以看到子類覆寫了父類的方法,也就是一個動態(tài)綁定,系統(tǒng)會運行時動態(tài)的決定調(diào)用子類覆寫后方法來實現(xiàn)多態(tài)的實現(xiàn)Java程序設(shè)計繼承

重寫(重寫父類繼承的方法)父類引用指向子類對象1.實現(xiàn)多態(tài)的三個條件:2.多態(tài)的實現(xiàn):1)通過繼承實現(xiàn)JAVA中,一個類之能有一個父類,不能多繼承。一個父類可以有多個子類,而在子類里可以重寫父類的方法,這樣每個子類里重寫的代碼不一樣,自然表現(xiàn)形式就不一樣。這樣用父類的變量去引用不同的子類,在調(diào)用這個相同的方法的時候得到的結(jié)果和表現(xiàn)形式就不一樣了,這就是多態(tài),相同的消息(也就是調(diào)用相同的方法)會有不同的結(jié)果2)通過接口實現(xiàn)繼承單繼承一個類只能繼承一個父類!接口多實現(xiàn)一個類可以同時實現(xiàn)多個接口!一個接口類型變量也可以指向其實現(xiàn)類的實例,這也是多態(tài)的一種表現(xiàn)。多態(tài)的實現(xiàn)Java程序設(shè)計//創(chuàng)建父類和子類(在Father1類文件中)publicclassFather1{publicvoidhit(){System.out.println("我是家長,可以打孩子!");}}classson1extendsFather1{publicvoidhit(){System.out.println("你憑什么打我?"); }}classson2extendsFather1{publicvoidhit(){System.out.println("我錯了,不要再打我了"); }}classson3extendsFather1{publicvoidhit(){System.out.println("我跑,你打不到了"); }}//創(chuàng)建測試類(在Father1Test1類文件中)publicclassFather1Test{publicstaticvoidmain(String[]args){Father1s1=newson1();s1.hit();Father1s2=newson2();s2.hit();Father1s3=newson3();s3.hit(); }}//創(chuàng)建父類、子類、測試類(在Father1Test類文件中)publicclassFather1Test{publicstaticvoidmain(String[]args){Father1s1=newson1();s1.hit();Father1s2=newson2();s2.hit();Father1s3=newson3();s3.hit(); }}classFather1{publicvoidhit(){System.out.println("我是家長,可以打孩子!");}}classson1extendsFather1{publicvoidhit(){System.out.println("你憑什么打我?"); }}classson2extendsFather1{publicvoidhit(){System.out.println("我錯了,不要再打我了"); }}classson3extendsFather1{publicvoidhit(){System.out.println("我跑,你打不到了"); }}創(chuàng)建了兩個類文件創(chuàng)建了一個類文件注意:在一個類文件中可以創(chuàng)建多個類,但是只能有一個public類,并且類的文件名必須為public的類名。當定義main方法的時候,因為開發(fā)環(huán)境默認了一些規(guī)則,如只在與文件名同名的類中查找main方法。所以需要把main方法定義在public定義的類當中。多態(tài)的實現(xiàn)Java程序設(shè)計父類與子類的轉(zhuǎn)換父類向子類轉(zhuǎn)換(向下轉(zhuǎn)型)子類向父類轉(zhuǎn)換(向上轉(zhuǎn)型)強制轉(zhuǎn)換自動轉(zhuǎn)換Animaldog=newDog()Animalanimal=newDog()Dogdog=(Dog)animal多態(tài)的實現(xiàn)Java程序設(shè)計父類向子類的轉(zhuǎn)換publicclassDuoTaiTest{publicstaticvoidmain(String[]args){Animaldog=newDog();duoTai(dog);}//創(chuàng)建一個多態(tài)方法duoTai,參數(shù)為定義一個Animal類型的對象名為animalpublicstaticvoidduoTai(Animalanimal){//判斷對象是否屬于Animal類if(animalinstanceofAnimal){System.out.println("它是一個動物");}//判斷對象是否屬于Dog類if(animalinstanceofDog){System.out.println("它是一只狗");//強制將對象animal轉(zhuǎn)換為Dog類型,名為dog,創(chuàng)建一個Dog類型的對象

Dogdog=(Dog)animal;//強制轉(zhuǎn)換后可以執(zhí)行子類中的特有的方法狗叫dog.bark();}//判斷對象是否屬于Bird類if(animalinstanceofBird){System.out.println("它是一只鳥");//強制將對象animal轉(zhuǎn)換為Bird類型,名為bird,創(chuàng)建一個Bird類型的對象Birdbird=(Bird)animal;//強制轉(zhuǎn)換后可以執(zhí)行子類中的特有的方法小鳥飛bird.fly();}}}classAnimal{publicvoideat(){System.out.println("動物在吃");}}classDogextendsAnimal{publicvoidbark(){System.out.println("dog在叫");}}classBirdextendsAnimal{publicvoidfly(){System.out.println("小鳥在飛");}}提示:instanceof運算符:判斷對象是否屬于某個類或者接口多態(tài)的優(yōu)點Java程序設(shè)計1).應(yīng)用程序不必為每一個派生類(子類)編寫功能調(diào)用,只需要對抽象基類進行處理即可。這一招叫“以不變應(yīng)萬變”,可以大大提高程序的可復(fù)用性。2).派生類的功能可以被基類的引用變量引用,這叫向后兼容,可以提高程序的可擴充性和可維護性。。任務(wù)實施Java程序設(shè)計任務(wù)描述:員工分為普通員工、售貨員、部門經(jīng)理三種角色;根據(jù)角色的不同,員工工資的計算機方式也不同,具體為:

普通員工:基本工資+崗位工資(600)+考勤(300)售貨員:基本工資+崗位工資(600+銷售額*0.02)+考勤(300)部門經(jīng)理:基本工資+崗位工資(1000)+考勤(300)針對不同的員工,最終輸出不同的員工工資packageData;

importjava.util.Scanner;//創(chuàng)建員工多態(tài)測試類publicclassDuoTai{

publicstaticvoidmain(String[]args){Employee21e=newSaler21();e.monthsalary();Employee21e1=newManager21();e1.monthsalary();}}//創(chuàng)建員工類classEmployee21{StringWorkNo;Stringname;Stringsex;Stringdepartment;doubleBaseSalary=2000;doublemonthSalary;//創(chuàng)建類方法monthsalary()publicvoidmonthsalary(){monthSalary=BaseSalary+600+300;System.out.println("員工信息為:");System.out.println("員工工號\t員工姓名\t員工性別\t員工的部門\t員工的基本工資\t員工的工資"); System.out.println(WorkNo+"\t"+name+"\t"+sex+"\t"+department+"\t"+BaseSalary+"\t"+monthSalary); } }//創(chuàng)建

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論