《Java程序設(shè)計案例教程(微課版)(第2版)》 課件 胡運玲 項目5-9 助農(nóng)超市購物程序 面向?qū)ο蠡A(chǔ)-詞頻統(tǒng)計 集合框架類_第1頁
《Java程序設(shè)計案例教程(微課版)(第2版)》 課件 胡運玲 項目5-9 助農(nóng)超市購物程序 面向?qū)ο蠡A(chǔ)-詞頻統(tǒng)計 集合框架類_第2頁
《Java程序設(shè)計案例教程(微課版)(第2版)》 課件 胡運玲 項目5-9 助農(nóng)超市購物程序 面向?qū)ο蠡A(chǔ)-詞頻統(tǒng)計 集合框架類_第3頁
《Java程序設(shè)計案例教程(微課版)(第2版)》 課件 胡運玲 項目5-9 助農(nóng)超市購物程序 面向?qū)ο蠡A(chǔ)-詞頻統(tǒng)計 集合框架類_第4頁
《Java程序設(shè)計案例教程(微課版)(第2版)》 課件 胡運玲 項目5-9 助農(nóng)超市購物程序 面向?qū)ο蠡A(chǔ)-詞頻統(tǒng)計 集合框架類_第5頁
已閱讀5頁,還剩287頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

項目5面向?qū)ο蠡A(chǔ)——助農(nóng)超市購物程序《Java程序設(shè)計案例教程(微課版)(第2版)》項目導(dǎo)入

利用Java編寫程序模擬消費者在超市購買農(nóng)產(chǎn)品的需求,以幫助農(nóng)民更有效地銷售其產(chǎn)品。從而增強學生對農(nóng)村經(jīng)濟發(fā)展的關(guān)注和責任感,激勵他們在今后的學習和工作中,積極為社會發(fā)展貢獻自己的力量。學習目標?熟悉面向?qū)ο缶幊痰?個特征。?掌握類的定義,以及對象的創(chuàng)建與使用。?掌握構(gòu)造方法,以及this和static關(guān)鍵字的使用。?掌握繼承的概念、方法的重寫、super關(guān)鍵字。

?培養(yǎng)社會責任感和服務(wù)意識,積極為社會發(fā)展做出貢獻。(素養(yǎng)目標)目錄CONTENTS任務(wù)5.1面向?qū)ο蟮奶卣魅蝿?wù)5.2類與對象任務(wù)5.3

繼承項目實施

助農(nóng)超市購物程序項目實訓

網(wǎng)上點餐系統(tǒng)任務(wù)5.1面向?qū)ο蟮奶卣髅嫦驅(qū)ο蟮奶卣髦饕梢愿爬榉庋b性、繼承性和多態(tài)性。1.封裝性將對象的屬性和行為封裝起來,盡可能地隱藏內(nèi)部的細節(jié),只保留一些對外的接口,使之與外部發(fā)生聯(lián)系,這就是封裝的思想。2.繼承性繼承性主要描述的是類與類之間的關(guān)系。繼承也是一種代碼復(fù)用的手段,通過繼承,可以在無須重新編寫原有類的情況下對原有類的功能進行擴展。3.多態(tài)性多態(tài)性指的是在程序中允許出現(xiàn)重名的現(xiàn)象。在父類中定義的屬性和方法被子類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為,這使得同一個屬性或方法在父類及其各個子類中具有不同的含義。目錄CONTENTS任務(wù)5.1面向?qū)ο蟮奶卣魅蝿?wù)5.2類與對象任務(wù)5.3

繼承項目實施

助農(nóng)超市購物程序項目實訓

網(wǎng)上點餐系統(tǒng)目錄CONTENTS任務(wù)5.2類與對象5.2.1類的定義5.2.2對象的創(chuàng)建與使用5.2.3構(gòu)造方法5.2.4this關(guān)鍵字5.2.5static關(guān)鍵字5.2.6訪問權(quán)限修飾符新課導(dǎo)入類與對象是面向?qū)ο缶幊讨休^重要、核心的兩個基本概念。其中,類是對某一類事物的抽象描述,而對象用于表示現(xiàn)實中該類事物的個體。5.2.1類的定義在類中可以定義成員變量和成員方法,其中成員變量用于描述對象的特征,也叫作屬性;成員方法用于描述對象的行為,可簡稱為方法。在Java中定義一個類,語法格式如下:[修飾符]class類名{成員變量的定義;成員方法的定義;}

說明:修飾符包括public、final、abstract等,關(guān)于這些修飾符的含義后文有詳細介紹,目前在定義類的時候可不加。5.2.1類的定義【例5-1】定義學生類。classStudent{ Stringname; intage; voidstudy(){ System.out.println(name+"同學正在學習中。。。。");}}5.2.2對象的創(chuàng)建與使用Java中,創(chuàng)建類的實例對象的語法格式如下:類名對象名稱=new類名();例如,創(chuàng)建一個Student類的實例對象,代碼如下:Studentstu=newStudent();創(chuàng)建Student類的對象后,便可以通過對象的引用來訪問對象的成員了,語法格式如下:對象引用.成員publicclassExample5_2{publicstaticvoidmain(String[]args){Studentstu1=newStudent(); ="張三"; stu1.age=20; stu1.study(); Studentstu2=newStudent(); ="李四"; stu2.age=25; stu2.study(); }}5.2.2對象的創(chuàng)建與使用【例5-2】創(chuàng)建對象并訪問對象的成員。任務(wù)實踐5-1購買火車票【任務(wù)描述】在寒暑假期間,學生購買火車票可以享受半價優(yōu)惠。而如果是普通旅客(兒童、軍人等特殊群體除外),則需要全價購買。設(shè)計一個購買火車票程序,旅客購票時在控制臺輸出旅客的姓名、類別、是否全價購票等信息。【任務(wù)分析】1.通過任務(wù)描述可知需要定義一個旅客類Passenger。2.旅客類具有屬性:名字(name)、類別(kind)。3.旅客類具有購票功能:定義一個購票(buyTickets())的方法。4.測試類中創(chuàng)建幾個旅客對象并進行購票。任務(wù)實踐5-2智能電視機的使用【任務(wù)描述】智能電視機是一種具備互聯(lián)網(wǎng)功能的電視機,成為現(xiàn)代家庭娛樂的重要組成部分。編寫一個程序,模擬智能電視機的使用。包括顯示電視機的配置信息、收看電視節(jié)目、播放視頻、投屏、玩游戲等?!救蝿?wù)分析】1.通過任務(wù)描述可知需要定義一個智能電視機類SmartTV。2.智能電視機具有的屬性:品牌(brand)、型號(model)、屏幕尺寸(size)。因此,需要在類中定義對應(yīng)的成員變量。3.智能電視機具有的功能:顯示配置信息(displayInfo())、收看節(jié)目(watchTV())、播放視頻(showVideo())、投屏(screenProjection()))、玩游戲(playGame())),因此可把這些功能定義為對應(yīng)的成員方法。4.測試類創(chuàng)建兩個智能電視對象并測試其各項功能。任務(wù)實踐5-3游戲賬號的充值與消費【任務(wù)描述】編寫一個游戲賬號充值和消費程序,實現(xiàn)充值和消費功能。【任務(wù)分析】1.通過任務(wù)描述可知,需要定義一個游戲帳戶類GameAccount實現(xiàn)游戲帳戶的概念。2.賬戶的屬性包括賬號和存款余額,所以需要在類中定義兩個成員變量:“帳號”(accountNum)和“游戲幣余額”(leftMoney)。3.對賬戶的操作包括充值、消費、查詢余額,所以在類中再定義三個成員方法:“充值”(saveMoney())、“消費”(getMoney())、“查詢余額”(getleftMoney())。需要注意:消費的方法中需要先判斷要消費的游戲幣數(shù)額是否小于等于余額,如果是則能消費,如果不是則給出提示:“當前賬戶余額不夠”。4.編寫測試類,在main()方法中創(chuàng)建一個GameAccount類的對象ga,假設(shè)ga的賬號為:123456,初始的存款余額為1000游戲幣。首先向該賬戶充值800游戲幣,再消費出600游戲幣,繼續(xù)再消費2000游戲幣。5.2.3構(gòu)造方法構(gòu)造方法是類的一種特殊方法,可用來初始化類的一個實例對象。它在創(chuàng)建對象(使用new關(guān)鍵字)之后自動調(diào)用。構(gòu)造方法有以下特點。(1)方法名與類名相同。(2)沒有任何返回值,連void關(guān)鍵字都不需要。(3)只能與new關(guān)鍵字結(jié)合使用。5.2.3構(gòu)造方法【例5-4】在Student類中定義構(gòu)造方法。classStudent{ Stringname; intage; Student(Stringn,inta){//定義構(gòu)造方法 name=n; age=a; } voidstudy(){ System.out.println(name+"同學

年齡"+age+"正在學習中。。。。"); }}publicclassExample5_4{ publicstaticvoidmain(String[]args){ Studentstu1=newStudent("張三",18); stu1.study(); Studentstu2=newStudent("李四",20); stu2.study(); }}5.2.3構(gòu)造方法說明:如果開發(fā)者沒有為一個類定義任何構(gòu)造方法,那么Java會自動為每個類創(chuàng)建一個默認的構(gòu)造方法。這個默認的構(gòu)造方法沒有任何參數(shù),在其方法體中也沒有任何代碼,即什么也不做。一旦為該類定義了構(gòu)造方法,系統(tǒng)就不再提供默認的構(gòu)造方法了。為了避免出現(xiàn)錯誤,在一個類中如果定義了有參的構(gòu)造方法,最好再定義一個無參的構(gòu)造方法。一般情況下,構(gòu)造方法是用來在創(chuàng)建對象時為對象的屬性賦初始值的。一個類中可以定義多個構(gòu)造方法,這叫作構(gòu)造方法的重載,在后文中會有詳細的介紹。5.2.4this關(guān)鍵字Java提供了一個關(guān)鍵字this,它指代當前對象,可用于表示訪問這個對象的成員。對例5-4定義的構(gòu)造方法進行修改,代碼如下:classStudent{ Stringname; intage; Student(Stringname,intage){ =name; this.age=age; }…//Student類的其他方法}5.2.4this關(guān)鍵字this這個關(guān)鍵字還有第二種用法。一個類中可以在一個構(gòu)造方法中使用“this([參數(shù)1,參數(shù)2,…])”的形式來調(diào)用其他的構(gòu)造方法?!纠?-5】構(gòu)造方法的調(diào)用。classStudent{ Stringname; intage; Student(Stringname){ =name; } Student(Stringname,intage){ this(name); this.age=age; } voidstudy(){ System.out.println(name+"同學

年齡"+age+"正在學習中。。。。"); }}publicclassExample5_5{ publicstaticvoidmain(String[]args){ Studentstu1=newStudent("張三"); stu1.study(); Studentstu2=newStudent("李四",20); stu2.study(); }}5.2.4this關(guān)鍵字在一個構(gòu)造方法中使用this調(diào)用另一個構(gòu)造方法時,需要注意以下幾點。(1)不能在成員方法中使用this來調(diào)用構(gòu)造方法。(2)在構(gòu)造方法中,使用this調(diào)用另外一個構(gòu)造方法的語句必須位于第一行,且只能出現(xiàn)一次。(3)不能在兩個構(gòu)造方法中使用this互相調(diào)用。5.2.5static關(guān)鍵字static是Java中的一個關(guān)鍵字或者修飾符,它表示靜態(tài),可用于修飾類中的成員變量、成員方法以及代碼塊。1.靜態(tài)變量在Java中,可以通過static關(guān)鍵字來修飾類的成員變量,該變量稱為靜態(tài)變量。靜態(tài)變量被該類所有的實例對象共享。在訪問時,可以通過“對象名.靜態(tài)變量名”的形式來訪問,還可以通過“類名.靜態(tài)變量名”的形式來訪問。5.2.5static關(guān)鍵字【例5-6】靜態(tài)變量的使用。classPerson{ staticStringcountry; }publicclassExample5_5{publicstaticvoidmain(String[]args){ Personp1=newPerson();p1.country="中國"; Personp2=newPerson();System.out.println(p2.country);Person.country="中華人民共和國"; System.out.println(p1.country);System.out.println(p2.country);}}5.2.5static關(guān)鍵字2.靜態(tài)方法在實際開發(fā)中,有時希望在不創(chuàng)建對象的情況下就可以調(diào)用某個方法,換句話說,該方法不必和對象綁在一起。要達到這樣的效果,只需要在類中定義的方法前加上static關(guān)鍵字即可,通常稱這種方法為靜態(tài)方法。同靜態(tài)變量一樣,靜態(tài)方法可以使用“類名.靜態(tài)方法名”的方式來訪問,也可以通過“對象名.靜態(tài)方法名”來訪問。5.2.5static關(guān)鍵字【例5-7】靜態(tài)方法的使用。classStudent{ staticvoidsayHello(){ System.out.println("你好!我是一名學生!");}}publicclassExample5_7{publicstaticvoidmain(String[]args){ Student.sayHello();Studentstu=newStudent();stu.sayHello();}}注意:靜態(tài)方法中只能訪問static修飾的成員。5.2.5static關(guān)鍵字3.靜態(tài)代碼塊代碼塊就是用花括號將多行代碼封裝在一起,形成的獨立代碼區(qū)。用static關(guān)鍵字修飾的代碼塊叫作靜態(tài)代碼塊。當類被加載時,靜態(tài)代碼塊會執(zhí)行。由于類只被加載一次,因此靜態(tài)代碼塊只執(zhí)行一次。5.2.5static關(guān)鍵字【例5-8】靜態(tài)代碼塊的使用。classStudent{ Stringname; Student(Stringname){ =name; System.out.println("構(gòu)造方法被調(diào)用了"); } voidstudy(){ System.out.println(name+"同學正在學習中。。。。"); } static{ System.out.println("初始化操作"); }}publicclassExample5_8{publicstaticvoidmain(String[]args){ Studentstu1=newStudent("張三"); stu1.study(); Studentstu2=newStudent("李四"); stu2.study(); }} 【任務(wù)描述】編寫程序模擬兩個村莊共用同一口井水。任意一個村莊都可以取用井里的水,也都可以查看井里的水量?!救蝿?wù)分析】1.通過任務(wù)描述可知,需要定義一個村莊類Village。2.Village類有一個成員變量num表示村莊的人數(shù),一個成員變量waterAmount用于模擬井水的水量,該成員變量是靜態(tài)的;還有一個方法setWaterAmount()用于設(shè)置井水的初始水量、一個方法lookWaterAmount()用于查看井水水量,這兩個方法都是靜態(tài)的,還有一個非靜態(tài)方法drinkWater()用于表示該村莊的人取用水(喝水)。3.測試類中創(chuàng)建兩個村莊,一個村莊改變了waterAmount的值,另一個村莊查看waterAmount的值。任務(wù)實踐5-4共飲同井水5.2.6訪問權(quán)限修飾符Java采用訪問權(quán)限修飾符來控制類及類中成員的訪問權(quán)限,分為以下4種級別:(1)private(類訪問級別):如果類的成員被private訪問權(quán)限修飾符修飾,那么這個成員只能被該類的其他成員訪問,其他類無法直接訪問。(2)default(包訪問級別):如果一個類或者類的成員不使用任何訪問權(quán)限修飾符修飾,那么稱這個類的訪問權(quán)限級別為默認訪問權(quán)限級別(包訪問級別),表示這個類或者類的成員只能被本包中的類訪問。(3)protected(子類訪問級別):如果一個類的成員被protected訪問權(quán)限修飾符修飾,那么這個成員既能被同一包下的類訪問,也能被不同包中該類的子類訪問。(4)public(公共訪問級別):如果一個類或者類的成員被public訪問權(quán)限修飾符修飾,那么這個類或者類的成員能被所有的類訪問,無論訪問類與被訪問類是否在同一個包中。5.2.6訪問權(quán)限修飾符訪問范圍訪問權(quán)限修飾符privatedefaultprotectedpublic同一類√√√√同一包中的類

√√√不同包中的子類

√√其他包中的類

√目錄CONTENTS任務(wù)5.1面向?qū)ο蟮奶卣魅蝿?wù)5.2類與對象任務(wù)5.3繼承項目實施

助農(nóng)超市購物程序項目實訓

網(wǎng)上點餐系統(tǒng)目錄CONTENTS任務(wù)5.3繼承5.3.1繼承的概念5.3.2方法的重寫5.3.3super關(guān)鍵字繼承在已經(jīng)存在的類的基礎(chǔ)上進行擴展,從而產(chǎn)生新的類。已經(jīng)存在的類稱為父類、基類或超類,而新產(chǎn)生的類稱為子類或派生類。在子類中,不僅包含父類的屬性和方法,還可以增加新的屬性和方法。Java中子類繼承父類的語法格式如下:修飾符classSubClassextendsSuperClass{//類的主體}5.3.1繼承的概念5.3.1繼承的概念【例5-9】繼承的使用。classPet{Stringname;

voideat(){

System.out.println(name+"寵物吃東西");}}classDogextendsPet{

publicvoidprintName(){

System.out.println("name="+name);}}publicclassExample5_8{

publicstaticvoidmain(String[]args){Dogdog=newDog();

="小黑";

dog.printName();

dog.eat();

}}5.3.1繼承的概念在類的繼承中,需要注意一些問題,具體如下。(1)在Java中,類只支持單繼承,不允許多重繼承,也就是說,一個類只能有一個直接父類。(2)多個類可以繼承一個父類。(3)在Java中,多層繼承是可以的,即一個類的父類可以再去繼承另外的父類。(4)在Java中,子類和父類是一種相對概念,也就是說,一個類是某個類的父類的同時也可以是另一個類的子類。5.3.2方法的重寫在繼承關(guān)系中,子類會自動繼承父類中定義的方法,但有時子類并不想原封不動地繼承父類的方法,而想做一定的修改,這就需要對父類的方法進行重寫。注意:(1)在子類中重寫的方法需要和父類中被重寫的方法具有相同的方法名、參數(shù)列表以及返回值類型。(2)子類在重寫父類方法時,不能使用比父類中被重寫的方法更嚴格的訪問權(quán)限。5.3.2方法的重寫【例5-10】方法的重寫。classPet{ voideat(){ System.out.println("寵物吃東西");}}classDogextendsPet{ voideat(){ System.out.println("狗吃骨頭");}}publicclassExample5_9{ publicstaticvoidmain(String[]args){Dogdog=newDog(); dog.eat(); }}5.3.3super關(guān)鍵字當子類重寫父類的方法后,子類對象將無法訪問父類被重寫的方法。為了解決這一問題,在Java中專門提供了一個super關(guān)鍵字。它可用于在子類中訪問父類的成員(成員變量、成員方法和構(gòu)造方法)。super關(guān)鍵字的用法如下:(1)super關(guān)鍵字可以用來引用父類的實例變量、調(diào)用父類方法(2)super()可以用來調(diào)用父類的構(gòu)造方法。5.3.3super關(guān)鍵字【例5-10】super關(guān)鍵字的使用。classPet{

Stringname="寵物";

voideat(){

System.out.println("寵物吃東西");}}classDogextendsPet{

Stringname="犬類"; voideat(){

System.out.println("狗吃骨頭");super.eat();

} voidprintName(){

System.out.println("name="+name); System.out.println("="+); }}publicclassExample5_10{

publicstaticvoidmain(String[]args){Dogdog=newDog();

dog.eat();

dog.printName();

}}5.3.3super關(guān)鍵字【例5-11】super關(guān)鍵字的使用。classPet{

publicPet(Stringname){

System.out.println("我是一只"+name);}}classDogextendsPet{

publicDog(){super("沙皮狗");

}}publicclassExample5_11{

publicstaticvoidmain(String[]args){Dogdog=newDog();

}}注意:通過super()調(diào)用父類構(gòu)造方法的代碼,必須位于子類構(gòu)造方法體的第一行,且只能出現(xiàn)一次。5.3.3super關(guān)鍵字在例5-11中,如果將“super("沙皮狗");”這一行代碼注釋掉,程序編譯后將報錯,會提示“父類構(gòu)造方法Pet()沒有被定義,必須顯式地調(diào)用另一個構(gòu)造方法”。這里出錯的原因是,在子類的構(gòu)造方法中一定會調(diào)用父類的某個構(gòu)造方法,可以在子類的構(gòu)造方法中通過super()指定調(diào)用父類的哪個構(gòu)造方法,如果沒有指定,在子類的構(gòu)造方法中會自動調(diào)用父類無參的構(gòu)造方法。而在上面的代碼中,因為定義了有參的構(gòu)造方法“Pet(Stringname)”,而沒有定義無參的構(gòu)造方法Pet(),所以報錯。為了解決上述程序的編譯錯誤,可以在子類中調(diào)用父類已有的構(gòu)造方法,當然也可以選擇在父類中定義無參的構(gòu)造方法。5.3.3super關(guān)鍵字【例5-12】在Pet類中定義無參構(gòu)造方法classPet{

publicPet(){

System.out.println("我是一只寵物");} publicPet(Stringname){

System.out.println("我是一只"+name);}}classDogextendsPet{

publicDog(){super("沙皮狗");

}}publicclassExample5_12{

publicstaticvoidmain(String[]args){Dogdog=newDog();

}}【任務(wù)描述】在物流運輸領(lǐng)域,卡車和火車是兩種常見的運輸方式,它們的計費方式也不同。下面列出了卡車和火車不同的計費方式:卡車:運費=重量x距離x120,當距離大于1000(km)或者重量大于60(t)的時候拒載。火車:當距離在900(km)內(nèi)(包含900)時,運費=重量x距離X250,大于900(km)時,運費=重量x距離x300?!救蝿?wù)分析】1.通過任務(wù)描述可知,需要定義一個卡車類和火車類,卡車類中有屬性:重量、距離,方法:計費,同樣火車類中也有屬性:重量、距離,方法:計費??紤]到這兩個類之間的聯(lián)系以及代碼的重用性,可定義一個車類作為這兩個類的父類。車類中具有的屬性為重量和距離,具有方法為計費。2.定義子類卡車類、火車類,在這兩個類中分別重寫計費的方法。3.編寫測試類,創(chuàng)建卡車和火車類對象,調(diào)用計算運費方法。任務(wù)實踐5-5卡車與火車的運費目錄CONTENTS任務(wù)5.1面向?qū)ο蟮奶卣魅蝿?wù)5.2類與對象任務(wù)5.3繼承項目實施助農(nóng)超市購物程序項目實訓

網(wǎng)上點餐系統(tǒng)項目實施項目分析本項目使用所學知識編寫一個助農(nóng)超市購物程序。購物時,如果購物者所要購買的農(nóng)產(chǎn)品在超市中有,則提示購物者買到了某產(chǎn)品;如果超市中沒有購物者所需要的農(nóng)產(chǎn)品,則提示購物者白跑了一塌,在超市中什么都沒有買到。1.通過任務(wù)的描述可知,此程序中包含了超市、農(nóng)產(chǎn)品和購物者3個對象。既然是去購買農(nóng)產(chǎn)品,那么可以先定義農(nóng)產(chǎn)品對象,農(nóng)產(chǎn)品對象需要有自己的名稱屬性。2.由于所有的農(nóng)產(chǎn)品是在超市中賣的,所以還需要定義一個超市對象。每個超市都會有自己的名稱和用于存放農(nóng)產(chǎn)品的倉庫。由于倉庫中會有很多農(nóng)產(chǎn)品,所以這里的倉庫可以用數(shù)組表示,超市的主要功能是賣農(nóng)產(chǎn)品,還要有個賣貨的方法。3.由于購物者是人,所以還需要定義一個Person對象,該對象需要有名稱屬性,還要有一個購物的方法。4.最后編寫測試類,在其main方法中,需要創(chuàng)建最后編寫測試類,在其main方法中,需要創(chuàng)建商品對象、超市對象以及人,并使用這些對象中定義的方法實現(xiàn)購物程序?qū)ο?、超市對象以及人,并使用這些對象中定義的方法實現(xiàn)購物程序。項目實施項目實施關(guān)鍵代碼如下://定義超市類publicclassSupermarket{

。。。。。。 //2.定義貨架數(shù)組 publicvoidsetProductArr(Product[]productArr){ ductArr=productArr; } //3.賣貨方法 Productsell(Stringname){//傳入要購買的農(nóng)產(chǎn)品名稱 for(inti=0;i<productArr.length;i++){//遍歷農(nóng)產(chǎn)品數(shù)組 if(productArr[i].getProductName()==name){ returnproductArr[i]; } } returnnull; }}項目實施項目實施關(guān)鍵代碼如下://定義購物者類publicclassPerson{

。。。。。。 //2.購買方法 Productshopping(Supermarketmarket,Stringname){ returnmarket.sell(name); }}項目實施項目實施關(guān)鍵代碼如下://測試類中部分代碼 Productp1=newProduct("土豆"); Productp2=newProduct("玉米"); Productp3=newProduct("地瓜"); Productp4=newProduct("花生"); Productp5=newProduct("大白菜"); Productp6=newProduct("油菜"); Productp7=newProduct("菠菜"); Productp8=newProduct("胡蘿卜"); Supermarkets1=newSupermarket("家樂福"); Supermarkets2=newSupermarket("大潤發(fā)"); Supermarkets3=newSupermarket("沃爾瑪"); s1.setProductArr(newProduct[]{p1,p2,p3,p4,p5,p6}); s2.setProductArr(newProduct[]{p2,p3,p4,p5,p6,p7}); s3.setProductArr(newProduct[]{p3,p4,p5,p6,p7,p8}); Personper=newPerson("小張"); Productresult=per.shopping(s2,"花生"); //Productresult=per.shopping(s3,"土豆"); if(result==null){ System.out.println("Emmmmmm,"+per.getPersonName()+"逛了一圈"+s2.getSupermaketName()+"超市,什么也沒買到"); }else{ System.out.println( per.getPersonName()+"逛了一圈"+s2.getSupermaketName()+"超市后,買到了"+result.getProductName()); }目錄CONTENTS任務(wù)5.1面向?qū)ο蟮奶卣魅蝿?wù)5.2類與對象任務(wù)5.3繼承項目實施助農(nóng)超市購物程序項目實訓網(wǎng)上點餐系統(tǒng)項目實訓網(wǎng)上點餐系統(tǒng)【項目描述】近年來,隨著互聯(lián)網(wǎng)的不斷發(fā)展和人們生活方式的變化,外賣點餐等線上消費的規(guī)模越來越大,成為餐飲消費的重要形式。用戶可以隨時隨地進行點餐,無需受限于餐廳的營業(yè)時間和地點,大大節(jié)省了時間和精力。外賣點餐,一方面用戶可以更輕松地享受美食。另一方面也促進了餐飲行業(yè)的發(fā)展。項目實訓網(wǎng)上點餐系統(tǒng)【項目分析】1.通過任務(wù)描述可知,該系統(tǒng)中必須包括3個實體類,類名及屬性設(shè)置如下:菜品類(Dish):菜品編號(id)、菜品名稱(name)、菜品價格(price);訂單項類(OrderItem):菜品(dish)、訂購份數(shù)(num);訂單類(Order):訂單號(orderID)、訂單項列表(items)、訂單總額(total);一個訂單里面可以包含多個訂單項。例如點餐時,可以選購多種菜品,每種菜品及其數(shù)量放在一個訂單項里。2.訂單項類里定義設(shè)置、獲取菜品對象以及菜品份數(shù)的方法。3.訂單類中定義計算訂單總額的方法,以及設(shè)置、獲取訂單列表、訂單號、訂單總額的方法。4.測試類中首先顯示菜品信息,然后顧客點餐,最后輸出訂單信息。小結(jié)THANKS!《Java程序設(shè)計案例教程(微課版)》項目6面向?qū)ο蟾呒墶诸惓绦颉禞ava程序設(shè)計案例教程(微課版)(第2版)》項目導(dǎo)入

為增強大眾環(huán)保意識、推動資源高效回收利用,我們借助Java語言開發(fā)垃圾分類程序。通過這個程序不能能幫助學生樹立責任感與社會擔當意識,更能凝聚各方力量,為建設(shè)美麗中國添磚加瓦。學習目標?掌握抽象類的定義與使用。?掌握接口的定義與實現(xiàn)。?掌握多態(tài)的使用。

?樹立環(huán)保意識與社會責任感,共同建設(shè)美麗中國。(素養(yǎng)目標)目錄CONTENTS任務(wù)6.1抽象類任務(wù)6.2接口任務(wù)6.3

多態(tài)項目實施

垃圾分類程序項目實訓

寵物之家6.1抽象類當一個類中包含抽象方法,該類必須定義為抽象類。抽象類用abstract關(guān)鍵字來修飾,示例如下:abstractclassPet{ abstractvoideat();}當定義一個類時,常常需要定義一些方法來描述該類的行為特征,但有時這些方法的實現(xiàn)方式是無法確定的。針對這樣的情況,Java允許在定義方法時不寫方法體。不包含方法體的方法為抽象方法,抽象方法必須使用abstract關(guān)鍵字來修飾,示例如下:abstractvoideat();

6.1抽象類注意:包含抽象方法的類必須聲明為抽象類,但抽象類可以不包含任何抽象方法。另外,抽象類是不可以被實例化的。因為抽象類中有可能包含抽象方法,而抽象方法是沒有方法體的,不可以被調(diào)用。如果想調(diào)用抽象類中定義的方法,則需要創(chuàng)建一個抽象類的子類,在子類中對抽象類的抽象方法進行實現(xiàn)。 【例6-1】實現(xiàn)抽象類中的抽象方法。abstractclassPet{ abstractvoideat(); }classDogextendsPet{ voideat(){ System.out.println("狗吃骨頭");}}publicclassExample6_1{

publicstaticvoidmain(String[]args){Dogdog=newDog();

dog.eat();

}}6.1抽象類目錄CONTENTS任務(wù)6.1抽象類任務(wù)6.2接口任務(wù)6.3

多態(tài)項目實施

垃圾分類程序項目實訓

寵物之家6.2.1接口的概念接口是從多個相似類中抽象出來的規(guī)范,它不提供任何方法的具體實現(xiàn)過程。接口體現(xiàn)的是規(guī)范和實現(xiàn)分離的設(shè)計思想。接口只定義了應(yīng)當遵循的規(guī)范,并不關(guān)心這些規(guī)范的內(nèi)部數(shù)據(jù)和其功能的實現(xiàn)細節(jié),從而分離了規(guī)范和實現(xiàn),增強了系統(tǒng)的可拓展性和可維護性。因此,接口定義的是多個類共同的行為規(guī)范,這些行為是與外部交流的通道,這就意味著接口里通常定義的是一組公用方法。6.2.2接口的定義與實現(xiàn)在定義接口時,需要使用interface關(guān)鍵字來聲明,語法格式如下:[public]interface接口名[extends接口1,接口2,…]{[public][static][final]數(shù)據(jù)類型常量名=常量值;[public][static][abstract]返回值抽象方法名(參數(shù)列表);}Java把接口當作一種特殊的類,每個接口都被編譯為一個獨立的字節(jié)碼文件。需要說明的是,一個接口可以有多個父接口,它們之間用英文逗號隔開。另外,接口中的變量默認使用“publicstaticfinal”來修飾,表示全局靜態(tài)常量;接口中定義的方法默認使用“publicstaticabstract”來修飾,表示靜態(tài)抽象方法。6.2.2接口的定義與實現(xiàn)由于接口中的方法都是抽象方法,因此不能通過實例化對象的方式來調(diào)用接口中的方法。此時需要定義一個類,并使用implements關(guān)鍵字實現(xiàn)接口,同時實現(xiàn)接口中所有的抽象方法。一個類可以同時實現(xiàn)多個接口,這些接口在implements子句中要使用英文逗號隔開。聲明接口的實現(xiàn)類的語法格式如下:[<修飾符>]class<類名>[extends<超類名>][implements<接口1>,<接口2>,…]Java提供接口的目的是克服單繼承的限制,因為一個類只能有一個父類,而一個類可以實現(xiàn)多個接口?!纠?-2】接口的實現(xiàn)。interfaceFlyable{

voidfly(); }classAirplaneimplementsFlyable{

publicvoidfly(){

System.out.println("飛機在飛行");}}classBirdimplementsFlyable{

publicvoidfly(){

System.out.println("鳥在飛行");}}publicclassExample6_2{publicstaticvoidmain(String[]args){Airplanea=newAirplane(); a.fly();

Birdb=newBird(); b.fly();

}}6.2.2接口的定義與實現(xiàn)【例6-3】接口之間的繼承。interfaceFlyable{

voidfly(); }interfaceAnimalFlyableextendsFlyable{

voideat(); }classBirdimplementsAnimalFlyable{

publicvoidfly(){

System.out.println("鳥在飛行");}publicvoideat(){

System.out.println("鳥吃蟲子");}}publicclassExample6_3{publicstaticvoidmain(String[]args){Birdb=newBird(); b.fly();

b.eat();

}}6.2.2接口的定義與實現(xiàn)6.2.2接口的定義與實現(xiàn)對接口的特點進行歸納,如下。(1)接口中的屬性只能是常量,方法只能是抽象方法,不能實例化對象。(2)接口中的屬性有默認修飾符“publicstaticfinal”,表示全局靜態(tài)常量;方法也有默認修飾符“publicstaticabstract”,表示靜態(tài)抽象方法。(3)一個類在實現(xiàn)接口時,需要對接口中的所有方法進行實現(xiàn)。如果沒有實現(xiàn)接口中的全部方法,則這個類需要定義為抽象類。(4)一個類可以實現(xiàn)多個接口。(5)一個接口可以通過extends關(guān)鍵字繼承多個父接口。(6)一個類在繼承另一個類的同時還可以實現(xiàn)接口,此時,extends關(guān)鍵字必須位于implements關(guān)鍵字前面。任務(wù)實踐6-1組裝一臺計算機【任務(wù)描述】自行組裝計算機非常盛行,裝配一臺計算機需要的部件主要包括主板、中央處理器(CPU)、顯卡、顯示器、內(nèi)存、硬盤等。每一個部件都有多種選擇,有不同品牌、不同廠家以及不同型號等,但不管選擇哪一種,都可以組裝到計算機上?,F(xiàn)在編寫一個程序,模擬組裝一臺計算機(為了簡化程序,組裝時只組裝幾個部件即可)?!救蝿?wù)分析】1.由于不同品牌、不同廠家以及不同型號的部件都可以組裝到計算機上,因此每一個部件都需要定義一個統(tǒng)一的接口規(guī)范。本案例分別定義CPU、硬盤、內(nèi)存的接口。2.分別定義部件類實現(xiàn)CPU、硬盤、內(nèi)存接口,在類中對部件進行具體的定義。例如,在實現(xiàn)CPU部件的時候,可以定義為Intel公司或者AMD公司的產(chǎn)品,還可以定義不同的主頻等。3.定義計算機類,分別實例化CPU、硬盤、內(nèi)存這些部件對象,并將其組裝到計算機上。任務(wù)實踐6-2USB接口的實現(xiàn)【任務(wù)描述】通常我們使用的計算機上都有USB接口,鼠標、鍵盤、麥克風等都可以通過USB接口使用。在計算機啟動時,這些設(shè)備也隨之啟動;當計算機關(guān)閉時,這些設(shè)備也會隨之關(guān)閉。鼠標、鍵盤、麥克風等USB接口設(shè)備都啟動后,計算機才開機成功;當這些USB接口設(shè)備都關(guān)閉后,計算機才關(guān)機成功。編寫一個USB接口模擬程序,模擬計算機的開機和關(guān)機過程?!救蝿?wù)分析】1.鼠標、鍵盤、音箱等USB接口設(shè)備只有在插入計算機的USB接口中才能使用,因此我們需要定義一個USB接口。為了實現(xiàn)設(shè)備隨著計算機的啟動和關(guān)閉而啟動和關(guān)閉的功能,我們在接口中定義了設(shè)備啟動和關(guān)閉的方法。2.編寫鼠標、鍵盤、音箱等設(shè)備的實現(xiàn)類,這些實現(xiàn)類需要遵循USB接口的標準,并實現(xiàn)設(shè)備的啟動和關(guān)閉方法。3.編寫一個計算機類。計算機類中包含了屬性USB插槽和安裝USB接口設(shè)備的方法。計算機中只有有了USB插槽后,才能插入USB接口設(shè)備。此外,計算機類還定義了開機和關(guān)機的方法。目錄CONTENTS任務(wù)6.1抽象類任務(wù)6.2接口任務(wù)6.3多態(tài)項目實施

垃圾分類程序項目實訓

寵物之家目錄CONTENTS任務(wù)6.3多態(tài)6.3.1多態(tài)的概念6.3.2靜態(tài)多態(tài)6.3.3動態(tài)多態(tài)6.3.4instanceof運算符多態(tài)性是面向?qū)ο蟮挠忠粋€重要特征。它是指在父類中定義的屬性和方法被子類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為,這使得同一個屬性或方法在父類及其各個子類中具有不同的含義。對面向?qū)ο髞碚f,多態(tài)分為編譯時多態(tài)和運行時多態(tài)。其中編譯時多態(tài)是靜態(tài)的,主要通過方法的重載來實現(xiàn),可根據(jù)參數(shù)列表的不同來區(qū)分調(diào)用不同的方法,編譯之后就可以區(qū)分。而運行時多態(tài)是動態(tài)的,通過動態(tài)綁定來實現(xiàn),也就是通常所說的多態(tài)性。6.3.1多態(tài)的概念靜態(tài)多態(tài)也叫編譯時多態(tài),是由方法的重載來實現(xiàn)的。Java允許在同一個類中定義多個同名方法,只要它們的形參列表不同即可。形參列表不同,包括參數(shù)的類型不同、參數(shù)的個數(shù)不同或者參數(shù)的順序不同。如果同一個類中包含兩個或兩個以上方法名相同、但形參列表不同的方法,則稱為方法重載(overload)。6.3.2靜態(tài)多態(tài)注意:方法重載的要求是,同一個類中方法名相同,參數(shù)列表不同。至于方法的其他部分,如方法返回值類型、修飾符等,與方法重載沒有任何關(guān)系。publicclassExample5_13{publicstaticvoidmain(String[]args){intsum1=add(1,2);intsum2=add(1,2,3);doublesum3=add(1.2,2.3);System.out.println("sum1="+sum1);System.out.println("sum2="+sum2);System.out.println("sum3="+sum3);}publicstaticintadd(intx,inty){returnx+y;}publicstaticintadd(intx,inty,intz){returnx+y+z;}publicstaticdoubleadd(doublex,doubley){returnx+y;}}【例6-4】方法重載的定義和使用。6.3.2靜態(tài)多態(tài)Java實現(xiàn)動態(tài)多態(tài)有3個必要條件:繼承、重寫和向上轉(zhuǎn)型。只有滿足這3個條件,開發(fā)人員才能夠在同一個繼承結(jié)構(gòu)中使用統(tǒng)一的邏輯來處理不同的對象,從而執(zhí)行不同的行為。向上轉(zhuǎn)型指的是將子類對象賦給父類引用,或者可理解為將子類類型轉(zhuǎn)為父類類型,即可以理解為下面的賦值操作。父類對象名=new子類對象()6.3.3動態(tài)多態(tài)classPet{

voideat(){

System.out.println("寵物吃東西");}}classCatextendsPet{

voideat(){

System.out.println("貓吃魚");}}classDogextendsPet{

voideat(){

System.out.println("狗吃骨頭");}}publicclassExample5_14{

publicstaticvoidmain(String[]args){Petp1=newCat();

Petp2=newDog();

p1.eat();

p2.eat();

}}【例6-5】多態(tài)的使用。6.3.3動態(tài)多態(tài)classPet{ voideat(){

System.out.println("寵物吃東西");}}classDogextendsPet{

voideat(){

System.out.println("狗吃骨頭");}publicvoidprotectHome(){

System.out.println("狗看家……");}}publicclassExample5_15{

publicstaticvoidmain(String[]args){Petp2=newDog();

p2.eat();

tectHome();

}}【例6-6】向上轉(zhuǎn)型后不能調(diào)用子類新增的方法。5.4.3動態(tài)多態(tài)publicclassExample5_15{

publicstaticvoidmain(String[]args){Petp2=newDog();

p2.eat();

Dogd=(Dog)p2;

tectHome();

}}5.4.3動態(tài)多態(tài)將父類類型當作子類類型使用的情況,叫作“向下轉(zhuǎn)型”。classPet{ voideat(){

System.out.println("寵物吃東西");}}classCatextendsPet{

voideat(){

System.out.println("貓吃魚");}publicvoidsleep(){

System.out.println("貓睡覺……");}}classDogextendsPet{

voideat(){

System.out.println("狗吃骨頭");}publicvoidprotectHome(){

System.out.println("狗看家……");}}【例6-7】向下轉(zhuǎn)型時出現(xiàn)錯誤。6.3.4instanceof運算符publicclassExample5_16{

publicstaticvoidmain(String[]args){ Petp2=newDog();

Catc=(Cat)p2;

c.sleep();

}}【例6-7】向下轉(zhuǎn)型時出現(xiàn)錯誤。6.3.4instanceof運算符為了防止出現(xiàn)強制類型轉(zhuǎn)換錯誤,Java提供了一個關(guān)鍵字instanceof。它可以判斷一個對象是否為某個類(或接口)的實例或者子類實例,如果是,則返回true,否則返回false。語法格式如下:對象(或?qū)ο笠米兞浚﹊nstanceof類(或接口)publicclassExample5_16{

publicstaticvoidmain(String[]args){ Petp2=newDog();

p2.eat();

if(p2instanceofCat)

{Catc=(Cat)p2;

c.sleep();

}}}6.3.4instanceof運算符任務(wù)實踐6-3動物樂園【任務(wù)描述】動物園中有不同的動物,每種動物都有自己喜歡的玩具。飼養(yǎng)員在跟動物玩耍時,會根據(jù)動物的喜好給它們提供相應(yīng)的玩具。本案例要求編寫一個程序模擬飼養(yǎng)員給動物提供玩具的過程。(1)飼養(yǎng)員給小狗提供球,小狗汪汪叫。(2)飼養(yǎng)員給小貓?zhí)峁~骨,小貓喵喵叫?!救蝿?wù)分析】1.在這個動物園里,涉及的對象有飼養(yǎng)員,各種不同動物以及不同的玩具。因此抽象出3個類Feeder、Animal和Toy。由于只考慮貓和狗這兩類動物,因此由Animal類派生出Cat類、Dog類,由Food類派生出Ball、FishBone類。2.Animal需要定義一些屬性和方法,將來由Cat類和Dog類繼承,因此可將Animal定義為抽象類,而不能將Animal定義為接口,因為定義為接口的話,內(nèi)部不能定義成員變量和成員方法。3.Toy類中雖然也有屬性和方法,但數(shù)量比Animal少,因此將Toy定義為接口。任務(wù)實踐6-4計算不同圖形的周長與面積【任務(wù)描述】本案例要求編寫一個程序,可以根據(jù)用戶要求計算出不同圖形的周長和面積。例如,計算圓的周長與面積、三角形的周長與面積、矩形的周長與面積?!救蝿?wù)分析】1.定義抽象的父類Shape類,包含抽象方法getPerimeter()、getArea()方法,分別用于計算圖形的周長、面積。2.定義子類Circle類,定義一個屬性表示半徑,并分別實現(xiàn)getPerimeter()、getArea()方法,用于計算圓的周長、面積。3.定義子類Rectangle類,定義兩個屬性分別表示長和寬,并分別實現(xiàn)getPerimeter()、getArea()方法,用于計算長方形的周長、面積。4.定義子類Triangle類,定義三個屬性分別表示三條邊,并分別實現(xiàn)getPerimeter()、getArea()方法,用于計算三角形的周長、面積。5.創(chuàng)建測試類,設(shè)計一個calPerimeter(Shapes)方法實現(xiàn)輸出圖形的周長、calArea(Shapes)方法實現(xiàn)輸出圖形的面積;主函數(shù)中分別創(chuàng)建Circle類、Rectangle類、Triangle類的對象,分別作為參數(shù)調(diào)用calPerimeter()、calArea()方法,查看輸出結(jié)果。任務(wù)實踐6-5交通工具動起來--多態(tài)的應(yīng)用【任務(wù)描述】設(shè)計和實現(xiàn)一個Movable移動接口,該接口具有移動功能,同時還能調(diào)節(jié)移動速度。Movable接口的這些功能將由有3種移動設(shè)備來實現(xiàn),分別是汽車Car、自行車Bicycle、滑板Skateboard。最后還需設(shè)計一個應(yīng)用程序類來使用這些實現(xiàn)Movable接口的移動設(shè)備。程序運行時,先詢問用戶想使用哪個設(shè)備,用戶選擇設(shè)備后,程序按照該設(shè)備的工作方式進行移動,并將移動結(jié)果輸出或展示?!救蝿?wù)分析】1.根據(jù)任務(wù)描述,需要定義一個移動接口Movable接口,接口中具有移動的方法move()、降低速度的方法decreaseSpeed()、停止移動的方法stopMove()。然后汽車Car、自行車Bicycle、滑板Skateboard這三個工具類分別實現(xiàn)這個接口并實現(xiàn)接口的相關(guān)方法。2.再定義一個應(yīng)用程序類StartWork來使用這些實現(xiàn)Movable接口的類。類中定義一個方法work(),方法中根據(jù)傳入的工具對象,調(diào)用相關(guān)方法,模擬使用工具對應(yīng)的功能。3.測試類中,分別創(chuàng)建汽車Car、自行車Bicycle、滑板Skateboard這三個工具類的對象,由用戶自主選擇要移動的工具,根據(jù)用戶的選擇,調(diào)用相關(guān)方法,模擬使用該工具對應(yīng)的功能。目錄CONTENTS任務(wù)6.1抽象類任務(wù)6.2接口任務(wù)6.3多態(tài)項目實施垃圾分類程序項目實訓

寵物之家項目實施項目分析本任務(wù)用使用所學知識編寫一個垃圾分類程序。垃圾箱有紅、綠、藍、灰四種顏色,分別代表可以投放不同種類的垃圾。紅色垃圾箱表示可以投放有害垃圾,例如廢電池、過期藥品等;綠色垃圾箱表示可以投放廚余垃圾,例如菜葉、果皮等;藍色垃圾箱表示可以投放可回收垃圾,例如廢紙、廢塑料等;灰色垃圾箱表示可以投放干垃圾,例如煙頭、一次的餐具等。當往垃圾箱中投放垃圾時,會先進行判斷,是否允許投放該類垃圾,如果能投放,則進行下一步的垃圾處理,如果不能投放,則給出提示。1.通過任務(wù)的描述可知,此程序中包含了垃圾箱、垃圾這些對象。由于垃圾分成四種種類,因此可先定義一個抽象的垃圾類,然后再分別定義四個垃圾子類,垃圾子類也是抽象類。最后再分別定義各種具體的垃圾類。2.抽象的垃圾類中可定義名稱屬性,以及抽象的方法如何投放垃圾以及如何處理垃圾。在四個垃圾子類中分別實現(xiàn)這兩個抽象方法。3.垃圾箱類中定義顏色屬性,并定義投放垃圾的方法。當把垃圾投放到垃圾箱時,需要判斷當前顏色的垃圾箱是否允許投放這種垃圾,如果允許,則進行下一步的處理,如果不允許則給出提示。4.最后編寫測試類,在其main方法中,創(chuàng)建垃圾箱對象以及垃圾對象,并將垃圾投放到垃圾箱中。項目實施項目實施關(guān)鍵代碼如下://定義垃圾類publicabstractclassWaste{ publicStringname;//垃圾名稱 publicabstractvoidhowToPut();//如何投放垃圾 publicabstractvoidhowToHandle();//如何處理垃圾}項目實施項目實施關(guān)鍵代碼如下://有害垃圾類publicabstractclassBadWasteextendsWaste{ @Override publicvoidhowToPut(){//實現(xiàn)如何投放垃圾方法 System.out.print("【投放要求】:"); System.out.println("電池投放請注意輕放、油漆桶、殺蟲劑如有殘留請密閉后投放"+"熒光燈、節(jié)能燈易破損請包裹后輕放、廢藥品及其包裝連帶包裝一并投放"); } @Override publicvoidhowToHandle(){//實現(xiàn)如何處理垃圾方法 System.out.print("【處理步驟】:"); System.out.print("先將"++"進行無害化,"); System.out.println("再進行后續(xù)的垃圾處理操作"); }}項目實施項目實施關(guān)鍵代碼如下://廢電池類publicclassBatteryextendsBadWaste{ publicBattery(Stringname){ =name; System.out.println("發(fā)現(xiàn)一些"+name); }}項目實施項目實施關(guān)鍵代碼如下://垃圾桶類publicclassWasteBin{

...... publicvoidput(Wastew){//投放垃圾的方法 if(color.equals("藍色")){ if(winstanceofReuseWaste){ System.out.println(">>向藍色垃圾桶放入了可回收垃圾:"+); w.howToHandle(); }else{ System.out.println(">>"++"不是可回收垃圾,不能投放到當前垃圾桶里!"); System.out.println("溫馨提醒:請根據(jù)垃圾桶的分類標識正確投放"); } }...... }}項目實施項目實施關(guān)鍵代碼如下://測試類publicclass垃圾分類{ publicstaticvoidmain(String[]args){ WasteBinrwb=newWasteBin("紅色"); Batterybattery=newBattery("廢電池"); battery.howToPut(); rwb.put(battery); Paperp=newPaper("廢紙"); p.howToPut(); rwb.put(p); VegetableLeafvl=newVegetableLeaf("菜葉"); vl.howToPut(); rwb.put(vl); CigaretteEndce=newCigaretteEnd("煙頭"); rwb.put(ce); WasteBinbwb=newWasteBin("藍色"); bwb.put(p); }}目錄CONTENTS任務(wù)6.1抽象類任務(wù)6.2接口任務(wù)6.3多態(tài)項目實施垃圾分類程序項目實訓寵物之家項目實訓寵物之家【項目描述】本案例將設(shè)計一款電子寵物系統(tǒng)——寵物之家,在該系統(tǒng)中,你可以領(lǐng)養(yǎng)自己喜歡的寵物。你喜歡狗、貓、小倉鼠,還是小兔子呢?這些都可以領(lǐng)養(yǎng)。你可以為寵物起名字,可以選擇寵物性別,還可以給寵物喂食、陪你的寵物玩耍。項目實訓寵物之家【項目分析】1.定義抽象類Pet類,類具有的屬性有昵稱(name),方法有自我介紹(introduce())、吃飯(eat())。2.在寵物之家中有各種各樣的寵物,如寵物狗、寵物貓、寵物兔等。為了簡化程序,當前只設(shè)計兩款寵物(寵物貓和寵物狗)。寵物貓類Cat繼承Pet類以上屬性和方法的同時,重寫自我介紹(introduce())方法,另外再定義自己特有的屬性——品種(strain),以及特有的方法滾球(rollBall())。寵物狗類Dog繼承Pet類以上屬性和方法的同時,重寫自我介紹(introduce())方法,另外再定義自己特有的屬性——性別(sex),以及特有的方法——吹泡泡(blowBubbles())。3.定義領(lǐng)養(yǎng)者類(Owner),具有姓名(name)屬性、給寵物喂食(feed())和陪寵物玩耍(play())方法。4.在給寵物喂食時,要實現(xiàn)分別給Cat和Dog對象喂食,因此通過多態(tài)來解決這個問題,定義feed(Petpet)方法實現(xiàn)為不同的寵物喂食,以增強程序的擴展性和可維護性。5.同樣的道理,陪寵物玩耍的方法play(Petpet)也可通過多態(tài)來實現(xiàn)。由于寵物貓玩耍,通過調(diào)用滾球方法rollBall()來實現(xiàn),而寵物狗玩耍,通過調(diào)用吹泡泡方法blowBubbles()來實現(xiàn),因此在paly()方法中需要向下轉(zhuǎn)型才能調(diào)用對應(yīng)寵物的方法。6.測試類中定義方法adopt()表示領(lǐng)養(yǎng)寵物,operate()方法表示操作寵物。然后創(chuàng)建一個領(lǐng)養(yǎng)者類對象,調(diào)用adopt()方法領(lǐng)養(yǎng)寵物,調(diào)用operate()方法操作寵物。小結(jié)THANKS!《Java程序設(shè)計案例教程(微課版)》項目7異常處理——異常成績處理《Java程序設(shè)計案例教程(微課版)(第2版)》項目導(dǎo)入

在測試學生成績管理系統(tǒng)的成績輸入模塊時,發(fā)現(xiàn)輸入不合法的成績時系統(tǒng)會停止運行,因此通過Java中的異常處理機制來確保程序的健壯性。通過這個程序培養(yǎng)學生主動積極面對和解決問題的態(tài)度,以應(yīng)對人生中的各種挑戰(zhàn)。學習目標?掌握異常的概念和體系結(jié)構(gòu)。?掌握異常的兩種處理方式。?掌握自定義異常。

?培養(yǎng)主動積極面對和解決問題的態(tài)度。(素養(yǎng)目標)目錄CONTENTS任務(wù)7.1

溫馨提示

  • 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

提交評論