《PHP》課件模塊三 面向?qū)ο蟪绦蛟O(shè)計(jì)_第1頁
《PHP》課件模塊三 面向?qū)ο蟪绦蛟O(shè)計(jì)_第2頁
《PHP》課件模塊三 面向?qū)ο蟪绦蛟O(shè)計(jì)_第3頁
《PHP》課件模塊三 面向?qū)ο蟪绦蛟O(shè)計(jì)_第4頁
《PHP》課件模塊三 面向?qū)ο蟪绦蛟O(shè)計(jì)_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Java是一門面向?qū)ο缶幊陶Z言,Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,極好地實(shí)現(xiàn)了面向?qū)ο罄碚?,允許程序員以優(yōu)雅的思維方式進(jìn)行復(fù)雜的編程。本模塊通過5個任務(wù)主要介紹面向相對的思想、類的定義、對象的創(chuàng)建與使用、類與對象之間的關(guān)系、構(gòu)造方法的定義、方法的重載、重寫、this關(guān)鍵字、super關(guān)鍵字、抽象類、接口以及封裝、繼承、多態(tài)面向?qū)ο蟮娜筇匦?。模塊介紹思維導(dǎo)圖教學(xué)大綱能力目標(biāo)◎能會用面向?qū)ο蟮乃枷敕治鰡栴}◎能夠用繼承、封裝、多態(tài)來解決生活中的實(shí)際問題◎能夠使用抽象方法來完成程序設(shè)計(jì)◎能夠使用面向接口編程的思想解決實(shí)際問題知識目標(biāo)◎了解面向?qū)ο蟮乃枷搿蛄私忸惡蛯ο蟮母拍罴捌潢P(guān)系◎掌握對象的創(chuàng)建及其使用◎掌握方法的使用◎掌握類的封裝方式◎掌握繼承的語法結(jié)構(gòu)和實(shí)現(xiàn)步驟◎掌握多態(tài)的定義和適用范圍◎掌握抽象的概念及抽象類的定義和使用◎掌握接口的定義和實(shí)現(xiàn)方式◎掌握this和super關(guān)鍵字的使用教學(xué)大綱學(xué)習(xí)重點(diǎn)◎封裝的應(yīng)用◎繼承的應(yīng)用◎多態(tài)的應(yīng)用◎接口的應(yīng)用學(xué)習(xí)難點(diǎn)◎多態(tài)的應(yīng)用任務(wù)3.1描述“手機(jī)類”信息程序設(shè)計(jì)任務(wù)目標(biāo)了解面向?qū)ο缶幊趟枷肜斫忸惡蛯ο蟮母拍钜约皟烧咧g的關(guān)系掌握類的定義掌握對象的創(chuàng)建和使用任務(wù)3.1描述“手機(jī)類”信息程序設(shè)計(jì)近年來,手機(jī)已經(jīng)成為人們?nèi)粘I钪胁豢扇鄙俚漠a(chǎn)品,手機(jī)的功能也日趨完善,已延伸到了各個領(lǐng)域。通常,手機(jī)包含品牌、價格、顏色等信息,具備打電話,發(fā)短信等功能,要求使用Java語言描述“手機(jī)類”并創(chuàng)建出兩個實(shí)際的手機(jī)對象。運(yùn)行效果如圖3-1所示。任務(wù)描述圖3-1任務(wù)1運(yùn)行效果圖任務(wù)3.1描述“手機(jī)類”信息程序設(shè)計(jì)3.1.1面向?qū)ο笏枷敫攀鯦ava語言是一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,而面向?qū)ο笏枷胧且环N程序設(shè)計(jì)思想,我們在面向?qū)ο笏枷氲闹敢?,使用Java語言去設(shè)計(jì)、開發(fā)計(jì)算機(jī)程序。這里的對象泛指現(xiàn)實(shí)中一切事物,每種事物都具備自己的屬性和行為。面向?qū)ο笏枷刖褪窃谟?jì)算機(jī)程序設(shè)計(jì)過程中,參照現(xiàn)實(shí)中事物,將事物的屬性特征、行為特征抽象出來,描述成計(jì)算機(jī)事件的設(shè)計(jì)思想。它區(qū)別于面向過程思想,強(qiáng)調(diào)的是通過調(diào)用對象的行為來實(shí)現(xiàn)功能,而不是自己一步一步的去操作實(shí)現(xiàn)。面向?qū)ο笏枷胧且环N更符合我們思考習(xí)慣的思想,它可以將復(fù)雜的事情簡單化,并將我們從執(zhí)行者變成了指揮者。面向?qū)ο蟮恼Z言中,包含了三大基本特征,即封裝、繼承和多態(tài)。知識準(zhǔn)備任務(wù)3.1描述“手機(jī)類”信息程序設(shè)計(jì)面向過程:把衣服脫下來-->找一個盆-->放點(diǎn)洗衣粉-->加點(diǎn)水-->浸泡10分鐘-->揉一揉-->清洗衣服-->擰干-->晾起來(強(qiáng)調(diào)步驟)面向?qū)ο螅喊岩路撓聛?->打開全自動洗衣機(jī)-->扔衣服-->按鈕-->晾起來(強(qiáng)調(diào)過程)舉例:任務(wù)3.1描述“手機(jī)類”信息程序設(shè)計(jì)3.1.2類與對象的概念及其關(guān)系1.類的概念類:是一組相關(guān)屬性(該事物的狀態(tài)信息)和行為(該事物能夠做什么)的集合。可以看成是一類事物的模板,使用事物的屬性特征和行為特征來描述該類事物。任務(wù)3.1描述“手機(jī)類”信息程序設(shè)計(jì)2.對象的概念對象:是一類事物的具體體現(xiàn)。對象是類的一個實(shí)例(對象并不是找個女朋友),必然具備該類事物的屬性和行為。任務(wù)3.1描述“手機(jī)類”信息程序設(shè)計(jì)3.類與對象的關(guān)系類是對象的模板,對象是類的實(shí)例。接下來通過一個圖例來描述類與對象之間的關(guān)系,如圖3-2所示。圖3-2類與對象任務(wù)3.1描述“手機(jī)類”信息程序設(shè)計(jì)3.1.3類的定義在面向?qū)ο蟮乃枷胫?,類只有通過對象才可以使用,而在開發(fā)之中應(yīng)該先產(chǎn)生類,之后再產(chǎn)生對象。類中封裝了一類對象的屬性和方法,屬性是描述對象的特征,方法描述對象的行為。就是定義類的成員,包括成員變量和成員方法。任務(wù)3.1描述“手機(jī)類”信息程序設(shè)計(jì)1.類的定義格式及說明[修飾符]class類名{

//成員變量

//成員方法}任務(wù)3.1描述“手機(jī)類”信息程序設(shè)計(jì)2.類的成員變量類的成員變量也被稱作類的屬性,它主要用于描述對象的特征。聲明成員變量的語法格式如下:[修飾符]數(shù)據(jù)類型變量名[=值];任務(wù)3.1描述“手機(jī)類”信息程序設(shè)計(jì)3.類的成員方法類的成員方法也稱為方法,主要用于描述對象的行為。定義一個方法的語法格式如下:[修飾符][返回值類型]方法名([參數(shù)類型參數(shù)名1,參數(shù)類型參數(shù)名2,,…]){ //方法體 return返回值;}任務(wù)3.1描述“手機(jī)類”信息程序設(shè)計(jì)3.1.4對象的創(chuàng)建與使用1.對象的創(chuàng)建類是對象的模板,對象是類的實(shí)例。應(yīng)用程序要想完成具體的功能,僅僅有類是遠(yuǎn)遠(yuǎn)不夠的,還需要創(chuàng)建該類的實(shí)例對象。在Java中,使用關(guān)鍵字new來創(chuàng)建一個新的對象。創(chuàng)建對象需要以下三步:聲明:聲明一個對象,包括對象名稱和對象類型。實(shí)例化:使用關(guān)鍵字new來創(chuàng)建一個對象。初始化:使用new創(chuàng)建對象時,會調(diào)用構(gòu)造方法初始化對象。任務(wù)3.1描述“手機(jī)類”信息程序設(shè)計(jì)2.對象的使用創(chuàng)建類的對象是為了能使用類中已定義的成員變量和成員方法。對象成員變量和方法的訪問格式如下:對象名.成員變量名;對象名.成員方法名([參數(shù)1,參數(shù)2…]);任務(wù)3.1描述“手機(jī)類”信息程序設(shè)計(jì)

任務(wù)實(shí)施根據(jù)任務(wù)分析可知,手機(jī)類的成員變量包括;品牌、價格、顏色,成員方法包括:打電話、發(fā)短信。編寫測試類分別聲明對象進(jìn)行調(diào)用。任務(wù)3.1描述“手機(jī)類”信息程序設(shè)計(jì)

實(shí)踐訓(xùn)練編寫一個“課程類”,其中成員變量包括年級、課程編號、課時數(shù),成員方法display(),用于顯示課程的信息,并編寫測試類進(jìn)行對象的創(chuàng)建。任務(wù)3.2實(shí)現(xiàn)簡單“計(jì)算器”程序設(shè)計(jì)任務(wù)目標(biāo)掌握構(gòu)造方法的定義和使用掌握this關(guān)鍵字的使用掌握方法重載的實(shí)現(xiàn)方式任務(wù)3.2實(shí)現(xiàn)簡單“計(jì)算器”程序設(shè)計(jì)在生產(chǎn)生活中,我們時時刻刻離不開計(jì)算,計(jì)算器作為一種計(jì)算工具,與我們的日常生活息息相關(guān)。本任務(wù)通過面向?qū)ο蟮乃枷胪瓿珊唵斡?jì)算器的程序設(shè)計(jì),實(shí)現(xiàn)計(jì)算器加減乘除運(yùn)算。運(yùn)行效果如圖3-3所示。任務(wù)描述圖3-3任務(wù)2運(yùn)行效果圖任務(wù)3.2實(shí)現(xiàn)簡單“計(jì)算器”程序設(shè)計(jì)3.2.1構(gòu)造方法在類中除了成員方法外,還有一種特殊類型的方法稱為構(gòu)造方法,當(dāng)一個對象被創(chuàng)建時候,構(gòu)造方法用來初始化該對象。構(gòu)造方法的特殊性體現(xiàn)在以下幾個方面:①構(gòu)造方法的名字必須與類的名字完全相同。②構(gòu)造方法沒有返回值。③在創(chuàng)建對象時,系統(tǒng)會自動調(diào)用類的構(gòu)造方法。④構(gòu)造方法一般用public關(guān)鍵字聲明,這樣才能在程序任意位置創(chuàng)建對象。⑤每個類至少有一個構(gòu)造方法。如果不定義構(gòu)造方法,Java將提供一個默認(rèn)的不帶參數(shù)且方法體為空的構(gòu)造方法。知識準(zhǔn)備任務(wù)3.2實(shí)現(xiàn)簡單“計(jì)算器”程序設(shè)計(jì)構(gòu)造方法的定義格式:[修飾符]方法名([參數(shù)類型參數(shù)名1,參數(shù)類型參數(shù)名2,,…]){ //方法體}任務(wù)3.2實(shí)現(xiàn)簡單“計(jì)算器”程序設(shè)計(jì)3.2.2this關(guān)鍵字Java中提供了一個關(guān)鍵字this,this代表所在類的當(dāng)前對象的引用(地址值),即對象自己的引用。(方法被哪個對象調(diào)用,方法中的this就代表那個對象。即誰在調(diào)用,this就代表誰。)接下來將詳細(xì)講解this關(guān)鍵字在程序中的3種常見用法,具體如下。任務(wù)3.2實(shí)現(xiàn)簡單“計(jì)算器”程序設(shè)計(jì)(1)通過this關(guān)鍵字調(diào)用成員變量,解決與局部變量名稱沖突問題。classPerson{intage;//成員變量agepublicPerson(intage){//局部變量agethis.age=age;//將局部變量age的值賦值給成員變量age}//定義speak()方法publicvoidspeak(){System.out.println("我今年"+age+"歲了!");}}publicclassExample3_3{publicstaticvoidmain(String[]args){Personp=newPerson(18);//實(shí)例化Person對象p.speak();}}任務(wù)3.2實(shí)現(xiàn)簡單“計(jì)算器”程序設(shè)計(jì)(2)在本類的成員方法中,訪問本類的另一個成員方法。具體代碼如下:classPerson{//定義openMouth()方法publicvoidopenMouth(){System.out.println("我張開嘴!");}//定義speak()方法publicvoidspeak(){ this.openMouth();System.out.println("我今年"+age+"歲了!");}}在上面的speak()方法中,使用this關(guān)鍵字調(diào)用了openMouth()方法,此處的關(guān)鍵字this也可以省略不寫。任務(wù)3.2實(shí)現(xiàn)簡單“計(jì)算器”程序設(shè)計(jì)(3)在本類的構(gòu)造方法中,訪問本類的另一個構(gòu)造方法。具體代碼如下:classPerson{publicPerson(){System.out.println("無參的構(gòu)造方法被調(diào)用了...");}publicPerson(intage){this();//調(diào)用無參的構(gòu)造方法System.out.println("有參的構(gòu)造方法被調(diào)用了...");}}任務(wù)3.2實(shí)現(xiàn)簡單“計(jì)算器”程序設(shè)計(jì)注意:只能在構(gòu)造方法中使用this調(diào)用其他的構(gòu)造方法,不能在成員方法中使用;在構(gòu)造方法中,使用this調(diào)用構(gòu)造方法的語句必須是該方法的第一條執(zhí)行語句,且只能出現(xiàn)一次;不能在一個類的兩個構(gòu)造方法中使用this互相調(diào)用任務(wù)3.2實(shí)現(xiàn)簡單“計(jì)算器”程序設(shè)計(jì)3.2.3方法重載方法重載:指在同一個類中,允許存在一個以上的同名方法,只要它們的參數(shù)不同即可,與修飾符和返回值類型無關(guān)。參數(shù)不同包括:參數(shù)的個數(shù)不同,數(shù)據(jù)類型不同,順序不同,主要體現(xiàn)在一下幾個方面。任務(wù)3.2實(shí)現(xiàn)簡單“計(jì)算器”程序設(shè)計(jì)(1)參數(shù)類型不同。例如:publicvoidshow(Strings);publicvoidshow(ints);(2)參數(shù)個數(shù)不同。例如:publicvoidshow(Strings,inti);publicvoidshow(Strings);(3)參數(shù)順序不同。例如:publicvoidshow(Strings,inti);publicvoidshow(inti,Strings);任務(wù)3.2實(shí)現(xiàn)簡單“計(jì)算器”程序設(shè)計(jì)

任務(wù)實(shí)施分析任務(wù),運(yùn)用面向?qū)ο蟮木幊趟枷?,定義一個計(jì)算器類,類中有兩個數(shù)值型的屬性,定義四種方法,分別實(shí)現(xiàn)加、減、乘、除運(yùn)算。編寫測試類分別聲明對象進(jìn)行調(diào)用。任務(wù)3.2實(shí)現(xiàn)簡單“計(jì)算器”程序設(shè)計(jì)

實(shí)踐訓(xùn)練編寫一個程序,實(shí)現(xiàn)設(shè)置上月、本月天然氣讀數(shù),顯示本月、上月燃?xì)獗碜x數(shù),計(jì)算并顯示本月使用燃?xì)夥綌?shù),假設(shè)每方燃?xì)赓M(fèi)的價格為3.4元,計(jì)算并顯示本月天然氣費(fèi)用。任務(wù)3.3個人“信息隱私”程序設(shè)計(jì)任務(wù)目標(biāo)理解封裝的意義掌握封裝的實(shí)現(xiàn)步驟掌握J(rèn)ava修飾符掌握static關(guān)鍵字的使用任務(wù)3.3個人“信息隱私”程序設(shè)計(jì)在現(xiàn)實(shí)生活中,人的姓名、年齡和體重都有一定的規(guī)范。要求使用封裝完成對屬性的控制,當(dāng)姓名、年齡、體重輸入錯誤時,給出相應(yīng)的提示。運(yùn)行效果如圖3-4所示。任務(wù)描述圖3-4任務(wù)3運(yùn)行效果圖任務(wù)3.3個人“信息隱私”程序設(shè)計(jì)3.3.1封裝封裝是面向?qū)ο蟮娜筇卣髦?,理解并掌握封裝對學(xué)習(xí)Java面向?qū)ο蟮膬?nèi)容非常的重要。知識準(zhǔn)備任務(wù)3.3個人“信息隱私”程序設(shè)計(jì)1.為什么需要封裝?通過一個例子先來了解為什么需要對類進(jìn)行封裝,如例3-5所示。classPerson{Stringname;intage;publicvoidspeak(){ System.out.println("我叫"+name+",今年"+age+"歲了"); }}publicclassExample3_5{ publicstaticvoidmain(String[]args){ Personp=newPerson(); ="張三"; p.age=20; p.speak(); }}例3-5Example3_5.java任務(wù)3.3個人“信息隱私”程序設(shè)計(jì)1.為什么需要封裝?在例3-5中,通過name="張三"、p.age=20這兩行代碼對姓名和年齡進(jìn)行賦值,語法上沒有任何問題,但是在現(xiàn)實(shí)生活中姓名和年齡一般比較隱私,為了對類中的屬性進(jìn)行更好的控制,應(yīng)該對成員變量的訪問做出一些限定,這就需要用到封裝。任務(wù)3.3個人“信息隱私”程序設(shè)計(jì)2.封裝的概念面向?qū)ο缶幊陶Z言是對客觀世界的模擬,客觀世界里成員變量都是隱藏在對象內(nèi)部的,外界無法直接操作和修改。封裝可以被認(rèn)為是一個保護(hù)屏障,防止該類的代碼和數(shù)據(jù)被其他類隨意訪問。要訪問該類的數(shù)據(jù),必須通過指定的方式。適當(dāng)?shù)姆庋b可以讓代碼更容易理解與維護(hù),也加強(qiáng)了代碼的安全性。任務(wù)3.3個人“信息隱私”程序設(shè)計(jì)3.封裝的實(shí)現(xiàn)步驟(1)使用private關(guān)鍵字來修飾成員變量。代碼如下:class

Person

{

private

String

name;

private

int

age;}任務(wù)3.3個人“信息隱私”程序設(shè)計(jì)(2)對需要訪問的成員變量,提供對應(yīng)的一對getXxx方法、setXxx方法。classPerson{privateStringname;privateintage;publicStringgetName(){returnname;}publicvoidsetName(Stringname){=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}任務(wù)3.3個人“信息隱私”程序設(shè)計(jì)3.3.2Java修飾符Java語言提供了很多修飾符,主要分為訪問修飾符和非訪問修飾符兩大類。訪問修飾符主要包括private、default、protected、public等;Java的非訪問修飾符有static、final、abstract、adbstract、synchronized、volatile等(將在后續(xù)章節(jié)逐一介紹)。Java中,可以使用訪問控制符來保護(hù)對類、變量、方法和構(gòu)造方法的訪問。Java支持4種不同的訪問權(quán)限,如表3-1所示。任務(wù)3.3個人“信息隱私”程序設(shè)計(jì)訪問范圍privatedefaultprotectedpublic同一類中√√√√同一包中

√√√子類中

√√全局范圍

√表3-1訪問控制修飾符作用范圍任務(wù)3.3個人“信息隱私”程序設(shè)計(jì)3.3.3static關(guān)鍵字關(guān)于static關(guān)鍵字的使用,它可以用來修飾成員變量、成員方法以及代碼塊,被修飾的成員是屬于類的,而不是單單是屬于某個對象的。也就是說,既然屬于類,就可以不靠創(chuàng)建對象來調(diào)用了。static修飾的內(nèi)容:是隨著類的加載而加載的,且只加載一次。存儲于一塊固定的內(nèi)存區(qū)域(靜態(tài)區(qū)),所以,可以直接被類名調(diào)用。它優(yōu)先于對象存在,所以,可以被所有對象共享。任務(wù)3.3個人“信息隱私”程序設(shè)計(jì)1.靜態(tài)變量當(dāng)static修飾成員變量時,該變量稱為類變量。該類的每個對象都共享同一個類變量的值。任何對象都可以更改該類變量的值,但也可以在不創(chuàng)建該類的對象的情況下對類變量進(jìn)行操作。static

數(shù)據(jù)類型

變量名;任務(wù)3.3個人“信息隱私”程序設(shè)計(jì)2.靜態(tài)方法當(dāng)static修飾成員方法時,該方法稱為類方法。靜態(tài)方法在聲明中有static,建議使用類名來調(diào)用,而不需要創(chuàng)建類的對象。定義格式:修飾符

static

返回值類型

方法名

(參數(shù)列表){//

執(zhí)行語句

}任務(wù)3.3個人“信息隱私”程序設(shè)計(jì)注意:①靜態(tài)方法可以直接訪問類變量和靜態(tài)方法。②靜態(tài)方法不能直接訪問普通成員變量或成員方法。反之,成員方法可以直接訪問類變量或靜態(tài)方法。③靜態(tài)方法中,不能使用this關(guān)鍵字。任務(wù)3.3個人“信息隱私”程序設(shè)計(jì)3.靜態(tài)代碼塊靜態(tài)代碼塊:定義在成員位置,使用static修飾的代碼塊{}。位置:類中方法外。執(zhí)行:隨著類的加載而執(zhí)行且執(zhí)行一次,優(yōu)先于main方法和構(gòu)造方法的執(zhí)行。定義格式:public

class

ClassName{

static

{

//

執(zhí)行語句

}}任務(wù)3.3個人“信息隱私”程序設(shè)計(jì)

任務(wù)實(shí)施根據(jù)任務(wù)分析可知:(1)需要定義屬性姓名、年齡、體重,并將其設(shè)置為私有的;(2)分別對姓名、年齡、體重這是三個屬性設(shè)置一對getXxx方法、setXxx方法;(3)在類中定義相應(yīng)的功能方法。(4)編寫測試類分別聲明對象進(jìn)行調(diào)用。任務(wù)3.3個人“信息隱私”程序設(shè)計(jì)

實(shí)踐訓(xùn)練通過封裝編寫水果類,模擬水果的買賣過程。要求:類具有名稱、價格、數(shù)量,其中,價格不能低于0,否則顯示“水果價格不符合常規(guī),請重新輸入!”,數(shù)量不能低于0,否則顯示“庫存不足,請選擇其他水果?!?;為各屬性設(shè)置賦值和取值方法;編寫方法detail(),在控制臺中打印水果的基本信息。任務(wù)3.4“大學(xué)生類”繼承關(guān)系程序設(shè)計(jì)任務(wù)目標(biāo)掌握繼承的概念及其實(shí)現(xiàn)方式掌握方法的覆蓋掌握super關(guān)鍵字任務(wù)3.4“大學(xué)生類”繼承關(guān)系程序設(shè)計(jì)現(xiàn)在大學(xué)生中,專科生和本科生占多數(shù),分別使用類表示這兩類大學(xué)生。要求大學(xué)生類屬性包括姓名、年齡,行為包括顯示學(xué)生信息;??祁悓傩猿税ㄐ彰?、年齡,增加學(xué)歷屬性,行為除了包括顯示學(xué)生的信息(重寫父類的方法),增加學(xué)習(xí)(內(nèi)容為“我的學(xué)習(xí)側(cè)重于實(shí)操?!保┑男袨?;專科類屬性除了包括姓名、年齡,增加學(xué)歷、學(xué)位屬性,行為除了包括顯示學(xué)生的信息(重寫父類的方法),增加學(xué)習(xí)(內(nèi)容為“我的學(xué)習(xí)側(cè)重于理論?!保┑男袨椤J褂妙惖睦^承管理學(xué)生的基本信息。運(yùn)行效果如圖3-5所示。任務(wù)描述任務(wù)3.4“大學(xué)生類”繼承關(guān)系程序設(shè)計(jì)任務(wù)描述圖3-5任務(wù)4運(yùn)行效果圖任務(wù)3.4“大學(xué)生類”繼承關(guān)系程序設(shè)計(jì)3.4.1繼承繼承是面向?qū)ο蟪绦蛟O(shè)計(jì)思想中最重要的一個特性。繼承簡化了人們對事物的認(rèn)識和描述,能清晰體現(xiàn)相關(guān)類間的層次結(jié)構(gòu)關(guān)系;繼承提供了軟件復(fù)用功能。這種做法能減小代碼和數(shù)據(jù)的冗余度,大大增加程序的重用性;提供多重繼承機(jī)制。知識準(zhǔn)備任務(wù)3.4“大學(xué)生類”繼承關(guān)系程序設(shè)計(jì)1.繼承的概念在生活中,也存在很多繼承關(guān)系,所屬人會想到子女繼承父輩的財(cái)產(chǎn)、事業(yè)等。例如兔子和羊?qū)儆谑巢輨游镱?,獅子和豹屬于食肉動物類。食草動物和食肉動物又是屬于動物類。雖然食草動物和食肉動物都是屬于動物,但是兩者的屬性和行為上有差別,所以子類會具有父類的一般特性也會具有自身的特性。如圖3-6所示。任務(wù)3.4“大學(xué)生類”繼承關(guān)系程序設(shè)計(jì)繼承描述的是事物之間的所屬關(guān)系,就是子類繼承父類的屬性和行為,使得子類對象具有與父類相同的屬性、相同的行為。子類可以直接訪問父類中的非私有的屬性和行為。圖3-6動物繼承關(guān)系圖任務(wù)3.4“大學(xué)生類”繼承關(guān)系程序設(shè)計(jì)2.繼承的實(shí)現(xiàn)[修飾符]class子類名extends父類名{ //核心代碼}任務(wù)3.4“大學(xué)生類”繼承關(guān)系程序設(shè)計(jì)注意:在Java中,類只支持單繼承,不允許多重繼承,也就是說一個類只能有一個直接父類。多個類可以繼承一個父類。在Java中,多層繼承是可以的,即一個類的父類可以再去繼承另外的父類。子類和父類是一種相對概念,也就是說一個類是某個類父類的同時,也可以是另一個類的子類。任務(wù)3.4“大學(xué)生類”繼承關(guān)系程序設(shè)計(jì)3.4.2方法的重寫子類中出現(xiàn)與父類一模一樣的方法時(返回值類型,方法名和參數(shù)列表都相同),會出現(xiàn)覆蓋效果,稱為方法重寫,也稱為方法覆蓋。聲明不變,重新實(shí)現(xiàn)。任務(wù)3.4“大學(xué)生類”繼承關(guān)系程序設(shè)計(jì)注意:①子類方法覆蓋父類方法,必須要保證權(quán)限大于等于父類權(quán)限。如:父類中的方法是public,子類的方法就不能是private。②子類方法覆蓋父類方法,返回值類型、函數(shù)名和參數(shù)列表都要一模一樣。任務(wù)3.4“大學(xué)生類”繼承關(guān)系程序設(shè)計(jì)3.4.3super關(guān)鍵字super關(guān)鍵字:我們可以通過super關(guān)鍵字來實(shí)現(xiàn)對父類成員的訪問。super關(guān)鍵字主要有兩種用法:(1)使用super關(guān)鍵字可以調(diào)用父類的成員變量和成員方法。(2)使用super關(guān)鍵字訪問父類的構(gòu)造方法。super關(guān)鍵字用來引用當(dāng)前對象的父類,this關(guān)鍵字是指向自己的引用。任務(wù)3.4“大學(xué)生類”繼承關(guān)系程序設(shè)計(jì)3.4.4final關(guān)鍵字學(xué)習(xí)了繼承后,我們知道,子類可以在父類的基礎(chǔ)上改寫父類內(nèi)容,比如,方法重寫。那么我們能不能隨意的繼承API中提供的類,改寫其內(nèi)容呢?顯然這是不合適的。為了避免這種隨意改寫的情況,Java提供了final關(guān)鍵字,用于修飾不可改變內(nèi)容。final關(guān)鍵字可以用于修飾類、變量和方法。任務(wù)3.4“大學(xué)生類”繼承關(guān)系程序設(shè)計(jì)(1)類:被修飾的類,不能被繼承。如例3-12所示。//使用final關(guān)鍵字修飾Animal類finalclassAnimal{}//Dog類繼承Animal類classDogextendsAnimal{}//定義測試類publicclassExample3_12{publicstaticvoidmain(String[]args){Dogdog=newDog();//創(chuàng)建Dog類的實(shí)例對象}}例3-12Example3_12.java任務(wù)3.4“大學(xué)生類”繼承關(guān)系程序設(shè)計(jì)運(yùn)行程序報(bào)錯,如圖3-7所示。圖3-7例3-12運(yùn)行結(jié)果任務(wù)3.4“大學(xué)生類”繼承關(guān)系程序設(shè)計(jì)(2)方法:被修飾的方法,不能被重寫。如例3-8所示。例3-13Example3_13.java//定義Animal類classAnimal{//使用final關(guān)鍵字修飾shout()方法publicfinalvoideat(){}}//定義Dog類繼承Animal類classDogextendsAnimal{//重寫Animal類的shout()方法publicvoideat(){}}//定義測試類publicclassExample3_13{publicstaticvoidmain(String[]args){Dogdog=newDog();//創(chuàng)建Dog類的實(shí)例對象}}任務(wù)3.4“大學(xué)生類”繼承關(guān)系程序設(shè)計(jì)運(yùn)行程序報(bào)錯,如圖3-8所示。圖3-8例3-13運(yùn)行結(jié)果任務(wù)3.4“大學(xué)生類”繼承關(guān)系程序設(shè)計(jì)(3)變量:被修飾的變量,不能被重新賦值。如例3-14所示。例3-14Example3_14.javapublicclassExample3_14{publicstaticvoidmain(String[]args){finalintNUM=2;//第一次可以賦值//NUM=4;//再次賦值會報(bào)錯}}任務(wù)3.4“大學(xué)生類”繼承關(guān)系程序設(shè)計(jì)運(yùn)行程序報(bào)錯,如圖3-9所示。圖3-9例3-14運(yùn)行結(jié)果任務(wù)3.4“大學(xué)生類”繼承關(guān)系程序設(shè)計(jì)

任務(wù)實(shí)施根據(jù)任務(wù)分析可知:(1)需要定義三個類,分別為大學(xué)生類、??粕?、本科生類,其中,專科生類、本科生類繼承自大學(xué)生類;(2)大學(xué)生類屬性包括姓名、年齡,行為包括:學(xué)習(xí);??粕悓傩园ǎ盒彰⒛挲g、學(xué)歷,行為包括:學(xué)習(xí)、顯示學(xué)生信息(需要對父類方法進(jìn)行重寫);本科生類屬性包括:姓名、年齡、學(xué)歷、學(xué)位,行為包括:學(xué)習(xí)、顯示學(xué)生信息(需要對父類方法進(jìn)行重寫);(3)編寫測試類分別聲明對象進(jìn)行調(diào)用。任務(wù)3.4“大學(xué)生類”繼承關(guān)系程序設(shè)計(jì)

實(shí)踐訓(xùn)練教師一般分專任教師崗位和行政管理崗位,在兩個類中一般都包含姓名、年齡、性別等基本屬性,方法為顯示教師信息。專任教師崗位中屬性還包含職稱,行政管理崗位中屬性還包含職務(wù)。使用類的繼承管理教師的基本信息。任務(wù)3.5模擬“筆記本”USB接口程序設(shè)計(jì)任務(wù)目標(biāo)掌握抽象類的概念和實(shí)現(xiàn)方式掌握接口的概念及其使用掌握多態(tài)的使用任務(wù)3.5模擬“筆記本”USB接口程序設(shè)計(jì)筆記本電腦(laptop)通常具備使用USB設(shè)備的功能。在生產(chǎn)時,筆記本都預(yù)留了可以插入U(xiǎn)SB設(shè)備的USB接口,但具體是什么USB設(shè)備,筆記本廠商并不關(guān)心,只要符合USB規(guī)格的設(shè)備都可以。進(jìn)行描述筆記本類,實(shí)現(xiàn)筆記本使用USB鼠標(biāo)、USB鍵盤。具體要求如下:(1)USB接口,包含開啟功能、關(guān)閉功能;(3)鼠標(biāo)類,要實(shí)現(xiàn)USB接口,并具備點(diǎn)擊的方法;(4)鍵盤類,要實(shí)現(xiàn)USB接口,具備敲擊的方法;(5)筆記本類,包含運(yùn)行功能、關(guān)機(jī)功能、使用USB設(shè)備功能。運(yùn)行效果如圖3-10所示。任務(wù)描述任務(wù)3.5模擬“筆記本”USB接口程序設(shè)計(jì)任務(wù)描述圖3-10任務(wù)5運(yùn)行效果圖任務(wù)3.5模擬“筆記本”USB接口程序設(shè)計(jì)3.5.1抽象類父類中的方法,被它的子類們重寫,子類各自的實(shí)現(xiàn)都不盡相同。那么父類的方法聲明和方法主體,只有聲明還有意義,而方法主體則沒有存在的意義了。我們把沒有方法主體的方法稱為抽象方法。Java語法規(guī)定,包含抽象方法的類就是抽象類。知識準(zhǔn)備任務(wù)3.5模擬“筆記本”USB接口程序設(shè)計(jì)1.抽象方法使用abstract關(guān)鍵字修飾方法,該方法就成了抽象方法,抽象方法只包含一個方法名,而沒有方法體。定義格式:修飾符

abstract

返回值類型

方法名

(參數(shù)列表);任務(wù)3.5模擬“筆記本”USB接口程序設(shè)計(jì)2.抽象類如果一個類包含抽象方法,那么該類必須是抽象類。定義格式:abstract

class

類名字

{…}任務(wù)3.5模擬“筆記本”USB接口程序設(shè)計(jì)注意:①抽象方法:必須使用abstract關(guān)鍵字來修飾,并且在定義方法時不需要實(shí)現(xiàn)方法體。②抽象類:當(dāng)一個類中包含了抽象方法,那么該類也必須使用abstract關(guān)鍵字來修飾,這種使用abstract關(guān)鍵字修飾的類就是抽象類。③抽象類里邊除了有抽象方法,還包含普通方法。④抽象類是不可以被實(shí)例化的,如果想調(diào)用抽象類中定義的抽象方法,需要創(chuàng)建一個子類,在子類中實(shí)現(xiàn)抽象類中的抽象方法。⑤子類必須重寫父類所有的抽象方法。否則,該子類也必須聲明為抽象類。任務(wù)3.5模擬“筆記本”USB接口程序設(shè)計(jì)3.5.2接口Java語言只支持單繼承,不支持多繼承。一般情況下,單繼承就可以解決大部分子類對父類的繼承問題。但是,當(dāng)問題復(fù)雜時,若只使用單繼承,可能會給設(shè)計(jì)帶來很多麻煩,這時就需要用到接口。任務(wù)3.5模擬“筆記本”USB接口程序設(shè)計(jì)1.接口的定義接口,是Java語言中一種引用類型,是方法的集合,如果說類的內(nèi)部封裝了成員變量、構(gòu)造方法和成員方法,那么接口的內(nèi)部主要就是封裝了方法,包含抽象方法(JDK7及以前),默認(rèn)方法和靜態(tài)方法(JDK8),私有方法(JDK9)。接口和抽象類相似,但又有一些差異,可以把接口理解為一個特殊的抽象類。任務(wù)3.5模擬“筆記本”USB接口程序設(shè)計(jì)注意:在接口中定義常量時,可以省略“publicstaticfinal”修飾符,接口會默認(rèn)為常量添加“publicstaticfinal”修飾符。與此類似,在接口中定義抽象方法時,也可以省略“publicabstract”修飾符,定義default默認(rèn)方法和static靜態(tài)方法時,可以省略“public”修飾符,定義私有方法時,可以省略“public”修飾符,這些修飾符系統(tǒng)都會默認(rèn)進(jìn)行添加。任務(wù)3.5模擬“筆記本”USB接口程序設(shè)計(jì)2.接口的實(shí)現(xiàn)類與接口的關(guān)系為實(shí)現(xiàn)關(guān)系,即類實(shí)現(xiàn)接口,該類可以稱為接口的實(shí)現(xiàn)類,也可以稱為接口的子類。實(shí)現(xiàn)的動作類似繼承,格式相仿,只是關(guān)鍵字不同,實(shí)現(xiàn)使用implements關(guān)鍵字。實(shí)現(xiàn)格式:class類名[extends父類名]

implements

接口名1,接口名2,…{

…}任務(wù)3.5模擬“筆記本”USB接口程序設(shè)計(jì)注意:當(dāng)一個類實(shí)現(xiàn)接口時,如果這個類是抽象類,只需實(shí)現(xiàn)接口中的部分抽象方法即可,否則需要實(shí)現(xiàn)接口中的所有抽象方法。一個類可以通過implements關(guān)鍵字同時實(shí)現(xiàn)多個接口,被實(shí)現(xiàn)的多個接口之間要用英文逗號(,)隔開。接口之間可以通過extends關(guān)鍵字實(shí)現(xiàn)繼承,并且一個接口可以同時繼承多個接口,接口之間用英文逗號(,)隔開。一個類在繼承一個類的同時還可以實(shí)現(xiàn)接口,此時,extends關(guān)鍵字必須位于implements關(guān)鍵字之前。接口中,無法定義成員變量,但是可以定義常量,其值不可以改變,默認(rèn)使用publicstaticfinal修飾。接口中,沒有構(gòu)造方法,不能創(chuàng)建對象。接口中,沒有靜態(tài)代碼塊。任務(wù)3.5模擬“筆

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論