




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
項目5面向對象基礎——助農超市購物程序《Java程序設計案例教程(微課版)(第2版)》項目導入
利用Java編寫程序模擬消費者在超市購買農產品的需求,以幫助農民更有效地銷售其產品。從而增強學生對農村經濟發展的關注和責任感,激勵他們在今后的學習和工作中,積極為社會發展貢獻自己的力量。學習目標?熟悉面向對象編程的3個特征。?掌握類的定義,以及對象的創建與使用。?掌握構造方法,以及this和static關鍵字的使用。?掌握繼承的概念、方法的重寫、super關鍵字。
?培養社會責任感和服務意識,積極為社會發展做出貢獻。(素養目標)目錄CONTENTS任務5.1面向對象的特征任務5.2類與對象任務5.3
繼承項目實施
助農超市購物程序項目實訓
網上點餐系統任務5.1面向對象的特征面向對象的特征主要可以概括為封裝性、繼承性和多態性。1.封裝性將對象的屬性和行為封裝起來,盡可能地隱藏內部的細節,只保留一些對外的接口,使之與外部發生聯系,這就是封裝的思想。2.繼承性繼承性主要描述的是類與類之間的關系。繼承也是一種代碼復用的手段,通過繼承,可以在無須重新編寫原有類的情況下對原有類的功能進行擴展。3.多態性多態性指的是在程序中允許出現重名的現象。在父類中定義的屬性和方法被子類繼承之后,可以具有不同的數據類型或表現出不同的行為,這使得同一個屬性或方法在父類及其各個子類中具有不同的含義。目錄CONTENTS任務5.1面向對象的特征任務5.2類與對象任務5.3
繼承項目實施
助農超市購物程序項目實訓
網上點餐系統目錄CONTENTS任務5.2類與對象5.2.1類的定義5.2.2對象的創建與使用5.2.3構造方法5.2.4this關鍵字5.2.5static關鍵字5.2.6訪問權限修飾符新課導入類與對象是面向對象編程中較重要、核心的兩個基本概念。其中,類是對某一類事物的抽象描述,而對象用于表示現實中該類事物的個體。5.2.1類的定義在類中可以定義成員變量和成員方法,其中成員變量用于描述對象的特征,也叫作屬性;成員方法用于描述對象的行為,可簡稱為方法。在Java中定義一個類,語法格式如下:[修飾符]class類名{成員變量的定義;成員方法的定義;}
說明:修飾符包括public、final、abstract等,關于這些修飾符的含義后文有詳細介紹,目前在定義類的時候可不加。5.2.1類的定義【例5-1】定義學生類。classStudent{ Stringname; intage; voidstudy(){ System.out.println(name+"同學正在學習中。。。。");}}5.2.2對象的創建與使用Java中,創建類的實例對象的語法格式如下:類名對象名稱=new類名();例如,創建一個Student類的實例對象,代碼如下:Studentstu=newStudent();創建Student類的對象后,便可以通過對象的引用來訪問對象的成員了,語法格式如下:對象引用.成員publicclassExample5_2{publicstaticvoidmain(String[]args){Studentstu1=newStudent(); ="張三"; stu1.age=20; stu1.study(); Studentstu2=newStudent(); ="李四"; stu2.age=25; stu2.study(); }}5.2.2對象的創建與使用【例5-2】創建對象并訪問對象的成員。任務實踐5-1購買火車票【任務描述】在寒暑假期間,學生購買火車票可以享受半價優惠。而如果是普通旅客(兒童、軍人等特殊群體除外),則需要全價購買。設計一個購買火車票程序,旅客購票時在控制臺輸出旅客的姓名、類別、是否全價購票等信息。【任務分析】1.通過任務描述可知需要定義一個旅客類Passenger。2.旅客類具有屬性:名字(name)、類別(kind)。3.旅客類具有購票功能:定義一個購票(buyTickets())的方法。4.測試類中創建幾個旅客對象并進行購票。任務實踐5-2智能電視機的使用【任務描述】智能電視機是一種具備互聯網功能的電視機,成為現代家庭娛樂的重要組成部分。編寫一個程序,模擬智能電視機的使用。包括顯示電視機的配置信息、收看電視節目、播放視頻、投屏、玩游戲等。【任務分析】1.通過任務描述可知需要定義一個智能電視機類SmartTV。2.智能電視機具有的屬性:品牌(brand)、型號(model)、屏幕尺寸(size)。因此,需要在類中定義對應的成員變量。3.智能電視機具有的功能:顯示配置信息(displayInfo())、收看節目(watchTV())、播放視頻(showVideo())、投屏(screenProjection()))、玩游戲(playGame())),因此可把這些功能定義為對應的成員方法。4.測試類創建兩個智能電視對象并測試其各項功能。任務實踐5-3游戲賬號的充值與消費【任務描述】編寫一個游戲賬號充值和消費程序,實現充值和消費功能。【任務分析】1.通過任務描述可知,需要定義一個游戲帳戶類GameAccount實現游戲帳戶的概念。2.賬戶的屬性包括賬號和存款余額,所以需要在類中定義兩個成員變量:“帳號”(accountNum)和“游戲幣余額”(leftMoney)。3.對賬戶的操作包括充值、消費、查詢余額,所以在類中再定義三個成員方法:“充值”(saveMoney())、“消費”(getMoney())、“查詢余額”(getleftMoney())。需要注意:消費的方法中需要先判斷要消費的游戲幣數額是否小于等于余額,如果是則能消費,如果不是則給出提示:“當前賬戶余額不夠”。4.編寫測試類,在main()方法中創建一個GameAccount類的對象ga,假設ga的賬號為:123456,初始的存款余額為1000游戲幣。首先向該賬戶充值800游戲幣,再消費出600游戲幣,繼續再消費2000游戲幣。5.2.3構造方法構造方法是類的一種特殊方法,可用來初始化類的一個實例對象。它在創建對象(使用new關鍵字)之后自動調用。構造方法有以下特點。(1)方法名與類名相同。(2)沒有任何返回值,連void關鍵字都不需要。(3)只能與new關鍵字結合使用。5.2.3構造方法【例5-4】在Student類中定義構造方法。classStudent{ Stringname; intage; Student(Stringn,inta){//定義構造方法 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構造方法說明:如果開發者沒有為一個類定義任何構造方法,那么Java會自動為每個類創建一個默認的構造方法。這個默認的構造方法沒有任何參數,在其方法體中也沒有任何代碼,即什么也不做。一旦為該類定義了構造方法,系統就不再提供默認的構造方法了。為了避免出現錯誤,在一個類中如果定義了有參的構造方法,最好再定義一個無參的構造方法。一般情況下,構造方法是用來在創建對象時為對象的屬性賦初始值的。一個類中可以定義多個構造方法,這叫作構造方法的重載,在后文中會有詳細的介紹。5.2.4this關鍵字Java提供了一個關鍵字this,它指代當前對象,可用于表示訪問這個對象的成員。對例5-4定義的構造方法進行修改,代碼如下:classStudent{ Stringname; intage; Student(Stringname,intage){ =name; this.age=age; }…//Student類的其他方法}5.2.4this關鍵字this這個關鍵字還有第二種用法。一個類中可以在一個構造方法中使用“this([參數1,參數2,…])”的形式來調用其他的構造方法。【例5-5】構造方法的調用。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關鍵字在一個構造方法中使用this調用另一個構造方法時,需要注意以下幾點。(1)不能在成員方法中使用this來調用構造方法。(2)在構造方法中,使用this調用另外一個構造方法的語句必須位于第一行,且只能出現一次。(3)不能在兩個構造方法中使用this互相調用。5.2.5static關鍵字static是Java中的一個關鍵字或者修飾符,它表示靜態,可用于修飾類中的成員變量、成員方法以及代碼塊。1.靜態變量在Java中,可以通過static關鍵字來修飾類的成員變量,該變量稱為靜態變量。靜態變量被該類所有的實例對象共享。在訪問時,可以通過“對象名.靜態變量名”的形式來訪問,還可以通過“類名.靜態變量名”的形式來訪問。5.2.5static關鍵字【例5-6】靜態變量的使用。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關鍵字2.靜態方法在實際開發中,有時希望在不創建對象的情況下就可以調用某個方法,換句話說,該方法不必和對象綁在一起。要達到這樣的效果,只需要在類中定義的方法前加上static關鍵字即可,通常稱這種方法為靜態方法。同靜態變量一樣,靜態方法可以使用“類名.靜態方法名”的方式來訪問,也可以通過“對象名.靜態方法名”來訪問。5.2.5static關鍵字【例5-7】靜態方法的使用。classStudent{ staticvoidsayHello(){ System.out.println("你好!我是一名學生!");}}publicclassExample5_7{publicstaticvoidmain(String[]args){ Student.sayHello();Studentstu=newStudent();stu.sayHello();}}注意:靜態方法中只能訪問static修飾的成員。5.2.5static關鍵字3.靜態代碼塊代碼塊就是用花括號將多行代碼封裝在一起,形成的獨立代碼區。用static關鍵字修飾的代碼塊叫作靜態代碼塊。當類被加載時,靜態代碼塊會執行。由于類只被加載一次,因此靜態代碼塊只執行一次。5.2.5static關鍵字【例5-8】靜態代碼塊的使用。classStudent{ Stringname; Student(Stringname){ =name; System.out.println("構造方法被調用了"); } voidstudy(){ System.out.println(name+"同學正在學習中。。。。"); } static{ System.out.println("初始化操作"); }}publicclassExample5_8{publicstaticvoidmain(String[]args){ Studentstu1=newStudent("張三"); stu1.study(); Studentstu2=newStudent("李四"); stu2.study(); }} 【任務描述】編寫程序模擬兩個村莊共用同一口井水。任意一個村莊都可以取用井里的水,也都可以查看井里的水量。【任務分析】1.通過任務描述可知,需要定義一個村莊類Village。2.Village類有一個成員變量num表示村莊的人數,一個成員變量waterAmount用于模擬井水的水量,該成員變量是靜態的;還有一個方法setWaterAmount()用于設置井水的初始水量、一個方法lookWaterAmount()用于查看井水水量,這兩個方法都是靜態的,還有一個非靜態方法drinkWater()用于表示該村莊的人取用水(喝水)。3.測試類中創建兩個村莊,一個村莊改變了waterAmount的值,另一個村莊查看waterAmount的值。任務實踐5-4共飲同井水5.2.6訪問權限修飾符Java采用訪問權限修飾符來控制類及類中成員的訪問權限,分為以下4種級別:(1)private(類訪問級別):如果類的成員被private訪問權限修飾符修飾,那么這個成員只能被該類的其他成員訪問,其他類無法直接訪問。(2)default(包訪問級別):如果一個類或者類的成員不使用任何訪問權限修飾符修飾,那么稱這個類的訪問權限級別為默認訪問權限級別(包訪問級別),表示這個類或者類的成員只能被本包中的類訪問。(3)protected(子類訪問級別):如果一個類的成員被protected訪問權限修飾符修飾,那么這個成員既能被同一包下的類訪問,也能被不同包中該類的子類訪問。(4)public(公共訪問級別):如果一個類或者類的成員被public訪問權限修飾符修飾,那么這個類或者類的成員能被所有的類訪問,無論訪問類與被訪問類是否在同一個包中。5.2.6訪問權限修飾符訪問范圍訪問權限修飾符privatedefaultprotectedpublic同一類√√√√同一包中的類
√√√不同包中的子類
√√其他包中的類
√目錄CONTENTS任務5.1面向對象的特征任務5.2類與對象任務5.3繼承項目實施
助農超市購物程序項目實訓
網上點餐系統目錄CONTENTS任務5.3繼承5.3.1繼承的概念5.3.2方法的重寫5.3.3super關鍵字繼承在已經存在的類的基礎上進行擴展,從而產生新的類。已經存在的類稱為父類、基類或超類,而新產生的類稱為子類或派生類。在子類中,不僅包含父類的屬性和方法,還可以增加新的屬性和方法。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方法的重寫在繼承關系中,子類會自動繼承父類中定義的方法,但有時子類并不想原封不動地繼承父類的方法,而想做一定的修改,這就需要對父類的方法進行重寫。注意:(1)在子類中重寫的方法需要和父類中被重寫的方法具有相同的方法名、參數列表以及返回值類型。(2)子類在重寫父類方法時,不能使用比父類中被重寫的方法更嚴格的訪問權限。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關鍵字當子類重寫父類的方法后,子類對象將無法訪問父類被重寫的方法。為了解決這一問題,在Java中專門提供了一個super關鍵字。它可用于在子類中訪問父類的成員(成員變量、成員方法和構造方法)。super關鍵字的用法如下:(1)super關鍵字可以用來引用父類的實例變量、調用父類方法(2)super()可以用來調用父類的構造方法。5.3.3super關鍵字【例5-10】super關鍵字的使用。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關鍵字【例5-11】super關鍵字的使用。classPet{
publicPet(Stringname){
System.out.println("我是一只"+name);}}classDogextendsPet{
publicDog(){super("沙皮狗");
}}publicclassExample5_11{
publicstaticvoidmain(String[]args){Dogdog=newDog();
}}注意:通過super()調用父類構造方法的代碼,必須位于子類構造方法體的第一行,且只能出現一次。5.3.3super關鍵字在例5-11中,如果將“super("沙皮狗");”這一行代碼注釋掉,程序編譯后將報錯,會提示“父類構造方法Pet()沒有被定義,必須顯式地調用另一個構造方法”。這里出錯的原因是,在子類的構造方法中一定會調用父類的某個構造方法,可以在子類的構造方法中通過super()指定調用父類的哪個構造方法,如果沒有指定,在子類的構造方法中會自動調用父類無參的構造方法。而在上面的代碼中,因為定義了有參的構造方法“Pet(Stringname)”,而沒有定義無參的構造方法Pet(),所以報錯。為了解決上述程序的編譯錯誤,可以在子類中調用父類已有的構造方法,當然也可以選擇在父類中定義無參的構造方法。5.3.3super關鍵字【例5-12】在Pet類中定義無參構造方法classPet{
publicPet(){
System.out.println("我是一只寵物");} publicPet(Stringname){
System.out.println("我是一只"+name);}}classDogextendsPet{
publicDog(){super("沙皮狗");
}}publicclassExample5_12{
publicstaticvoidmain(String[]args){Dogdog=newDog();
}}【任務描述】在物流運輸領域,卡車和火車是兩種常見的運輸方式,它們的計費方式也不同。下面列出了卡車和火車不同的計費方式:卡車:運費=重量x距離x120,當距離大于1000(km)或者重量大于60(t)的時候拒載。火車:當距離在900(km)內(包含900)時,運費=重量x距離X250,大于900(km)時,運費=重量x距離x300。【任務分析】1.通過任務描述可知,需要定義一個卡車類和火車類,卡車類中有屬性:重量、距離,方法:計費,同樣火車類中也有屬性:重量、距離,方法:計費。考慮到這兩個類之間的聯系以及代碼的重用性,可定義一個車類作為這兩個類的父類。車類中具有的屬性為重量和距離,具有方法為計費。2.定義子類卡車類、火車類,在這兩個類中分別重寫計費的方法。3.編寫測試類,創建卡車和火車類對象,調用計算運費方法。任務實踐5-5卡車與火車的運費目錄CONTENTS任務5.1面向對象的特征任務5.2類與對象任務5.3繼承項目實施助農超市購物程序項目實訓
網上點餐系統項目實施項目分析本項目使用所學知識編寫一個助農超市購物程序。購物時,如果購物者所要購買的農產品在超市中有,則提示購物者買到了某產品;如果超市中沒有購物者所需要的農產品,則提示購物者白跑了一塌,在超市中什么都沒有買到。1.通過任務的描述可知,此程序中包含了超市、農產品和購物者3個對象。既然是去購買農產品,那么可以先定義農產品對象,農產品對象需要有自己的名稱屬性。2.由于所有的農產品是在超市中賣的,所以還需要定義一個超市對象。每個超市都會有自己的名稱和用于存放農產品的倉庫。由于倉庫中會有很多農產品,所以這里的倉庫可以用數組表示,超市的主要功能是賣農產品,還要有個賣貨的方法。3.由于購物者是人,所以還需要定義一個Person對象,該對象需要有名稱屬性,還要有一個購物的方法。4.最后編寫測試類,在其main方法中,需要創建最后編寫測試類,在其main方法中,需要創建商品對象、超市對象以及人,并使用這些對象中定義的方法實現購物程序對象、超市對象以及人,并使用這些對象中定義的方法實現購物程序。項目實施項目實施關鍵代碼如下://定義超市類publicclassSupermarket{
。。。。。。 //2.定義貨架數組 publicvoidsetProductArr(Product[]productArr){ ductArr=productArr; } //3.賣貨方法 Productsell(Stringname){//傳入要購買的農產品名稱 for(inti=0;i<productArr.length;i++){//遍歷農產品數組 if(productArr[i].getProductName()==name){ returnproductArr[i]; } } returnnull; }}項目實施項目實施關鍵代碼如下://定義購物者類publicclassPerson{
。。。。。。 //2.購買方法 Productshopping(Supermarketmarket,Stringname){ returnmarket.sell(name); }}項目實施項目實施關鍵代碼如下://測試類中部分代碼 Productp1=newProduct("土豆"); Productp2=newProduct("玉米"); Productp3=newProduct("地瓜"); Productp4=newProduct("花生"); Productp5=newProduct("大白菜"); Productp6=newProduct("油菜"); Productp7=newProduct("
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 氣體壓縮機械的防爆設計與安全規范考核試卷
- 管道工程環境風險評估考核試卷
- 磷肥產品市場推廣效果與品牌影響力研究考試考核試卷
- 船用電池充電系統的故障診斷與維修考核試卷
- 紡織設備質量管理與六西格瑪考核試卷
- 皮革制品的表面處理與效果呈現考核試卷
- 導演聘用協議合同書范例
- 政策性銀行服務社會公益事業的模式與經驗考核試卷
- 金融行業AI倫理監管政策對金融穩定性的影響研究報告
- 電視音效處理與杜比音效技術考核試卷
- 房屋維修工程施工方案及質量工期保障措施
- 經導管主動脈瓣置換術(TAVR)患者的麻醉管理
- 材料腐蝕與防護智慧樹知到期末考試答案章節答案2024年山東建筑大學
- 年產15萬噸煤制甲醇生產的工藝設計0
- 河南省鄭州市2023-2024學年高二下學期6月期末英語試題(解析版)
- 國家開放大學專科《法理學》(第三版教材)形成性考核試題及答案
- 2023年小型水庫雨水情測報和大壩安全監測設施項目-實施方案
- 橋梁博士畢業設計電子版
- MOOC 犯罪心理學-西南政法大學 中國大學慕課答案
- (2024年)面神經炎課件完整版
- 減鹽減油健康教育教案反思
評論
0/150
提交評論