java程序設(shè)計任務(wù)式教程 課件 4-面向?qū)ο缶幊袒A(chǔ)_第1頁
java程序設(shè)計任務(wù)式教程 課件 4-面向?qū)ο缶幊袒A(chǔ)_第2頁
java程序設(shè)計任務(wù)式教程 課件 4-面向?qū)ο缶幊袒A(chǔ)_第3頁
java程序設(shè)計任務(wù)式教程 課件 4-面向?qū)ο缶幊袒A(chǔ)_第4頁
java程序設(shè)計任務(wù)式教程 課件 4-面向?qū)ο缶幊袒A(chǔ)_第5頁
已閱讀5頁,還剩110頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

JaVa程序設(shè)計任務(wù)式教程01任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類02任務(wù)4-2在線課程管理系統(tǒng)-課程選課03任務(wù)4-3在線課程管理系統(tǒng)-課程信息封裝應(yīng)用目錄CONTNETS單元四面向?qū)ο缶幊袒A(chǔ)04任務(wù)4-3模擬銀行理財存款單元目標能夠創(chuàng)建和使用類與對象。能夠編寫構(gòu)造方法并實現(xiàn)封裝。能夠?qū)崿F(xiàn)類的繼承和多態(tài)。能夠編寫異常處理的語句塊捕獲并處理異常。能夠定義和使用抽象類和接口。能夠使用包構(gòu)建和管理項目結(jié)構(gòu)和代碼。培養(yǎng)學(xué)生的抽象思維能力。提高學(xué)生解決問題的能力。增強學(xué)生的代碼組織和設(shè)計能力。知識目標能力目標素養(yǎng)目標學(xué)習(xí)目標理解面向?qū)ο缶幊痰幕靖拍?。掌握類的定義和對象的使用。學(xué)會構(gòu)造方法的重載和封裝的實現(xiàn)。了解繼承和多態(tài)的實現(xiàn)機制。理解異常的概念,掌握異常處理的基本方法。理解抽象類和接口的定義及其使用。理解包的概念,掌握包構(gòu)建項目的基本方法。01任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類什么是面向?qū)ο缶幊堂嫦驅(qū)ο缶幊痰膬?yōu)勢面向?qū)ο缶幊痰幕驹瓌t:封裝、繼承、多態(tài)類的定義成員變量與局部變量成員方法創(chuàng)建對象訪問對象的屬性和方法構(gòu)造方法任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀鍪裁词敲嫦驅(qū)ο缶幊堂嫦驅(qū)ο缶幊蹋∣OP)將數(shù)據(jù)和操作封裝在一起的編程方法,通過對象和類來組織代碼。比如需要編寫一個車輛駕駛的程序。在面向過程編程中,需要編寫一系列函數(shù)來控制車輛的操作:啟動引擎()、加速()、剎車()等等。而在面向?qū)ο缶幊讨?,則需創(chuàng)建一個“小轎車”對象,使其擁有自己的屬性(顏色、型號、速度)和方法(啟動引擎、加速、剎車)。面向?qū)ο缶幊膛c面向過程對比面向?qū)ο缶幊虒⒊绦蛞暈橄嗷プ饔玫摹皩ο蟆钡募稀jP(guān)注的程序的功能是“誰來做”,即對象及其職責(zé)。提高代碼重用性,更易維護和擴展。面向過程編程將程序視為一系列指令的集合,按順序執(zhí)行。關(guān)注的是程序的功能“如何做”,即步驟和流程。容易導(dǎo)致代碼冗余,難以維護和擴展。任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀雒嫦驅(qū)ο缶幊痰膬?yōu)勢1.模塊化和代碼重用性2.代碼可維護性和可擴展性:3.數(shù)據(jù)安全性和可靠性:4.更接近現(xiàn)實世界的建模:5.大規(guī)模項目的優(yōu)勢:任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀雒嫦驅(qū)ο缶幊痰幕驹瓌t:封裝、繼承、多態(tài)封裝(Encapsulation)封裝是面向?qū)ο蟮暮诵乃枷?,它指的是將?shù)據(jù)和操作數(shù)據(jù)的方法組合在一起,隱藏內(nèi)部實現(xiàn)細節(jié),只暴露給外部有限的接口。這樣,外部只能通過這些接口來訪問和修改對象的狀態(tài),而不能直接訪問和修改對象的內(nèi)部數(shù)據(jù)。封裝的目的是保護數(shù)據(jù)的完整性,防止外部直接干擾,確保對象的狀態(tài)一致性。在Java中,通過將成員變量設(shè)置為私有(private)來實現(xiàn)封裝,并提供公共(public)方法來訪問和修改這些變量任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀雒嫦驅(qū)ο缶幊痰幕驹瓌t:封裝、繼承、多態(tài)繼承(Inheritance)繼承是面向?qū)ο缶幊痰囊粋€重要特性,它允許我們定義一個新的類(子類)來繼承另一個類(父類)的屬性和方法。子類可以添加新的屬性和方法,或者覆蓋父類的方法。繼承的目的是代碼重用和擴展。通過繼承,子類可以重用父類的代碼,從而實現(xiàn)代碼的復(fù)用。同時,子類可以根據(jù)需要添加新的屬性和方法,或者覆蓋父類的方法,從而實現(xiàn)代碼的擴展。任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀雒嫦驅(qū)ο缶幊痰幕驹瓌t:封裝、繼承、多態(tài)多態(tài)(Polymorphism)多態(tài)是面向?qū)ο缶幊痰牧硪粋€重要特性,它允許我們使用一個接口或父類來引用其子類的對象。這意味著我們可以編寫更通用的代碼,它可以在不同的對象上工作,只要這些對象實現(xiàn)了相同的接口或繼承了相同的父類。任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀鲱惻c對象對象是面向?qū)ο蟪绦蛟O(shè)計的核心概念,即類和對象。我們放眼所及的物理實體均可以視為對象,樓宇、車輛、植物、行人等都可以看作是一個對象。其中,類是對某一類事物的抽象描述,而對象用于表示現(xiàn)實中該類事物的個體。比如我們把所有能夠進行產(chǎn)氧光合作用的生物都稱為植物,可使用圖例來抽象描述類與對象的關(guān)系植物作為一個統(tǒng)稱,可看成為類,到了最底層節(jié)點可看作對象,從植物類別的關(guān)系便可以看出類與對象之間的關(guān)系。類用于描述多個對象的共同特征,它是對象的模板。對象用于描述現(xiàn)實中的個體,它是類的實例。從圖4-1可以明顯看出對象是根據(jù)類創(chuàng)建的,并且一個類可以對應(yīng)多個對象任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀鲱惖亩x創(chuàng)建對象,首先需要定義一個類。類中可以定義成員變量和成員方法,其中成員變量用于描述對象的特征,也被稱作屬性,成員方法用于描述對象的行為,可簡稱為方法。類的組成是由屬性和行為兩部分組成:屬性:在類中通過成員變量來體現(xiàn)(類中方法外的變量)行為:在類中通過成員方法來體現(xiàn)(和前面的方法相比去掉static關(guān)鍵字即可)定義類可分三步完成:定義類名編寫類的成員變量編寫類的成員方法任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀鲱惖亩x類的定義的語法格式publicclass類名{ //成員變量

變量1的數(shù)據(jù)類型變量1;

變量2的數(shù)據(jù)類型變量2; … //成員方法

方法1;

方法2; }語法格式說明class前的public修飾符可以沒有,也可以有多個,用來限定類的使用方式或范圍。class是Java關(guān)鍵字,表明其后定義的是一個類。類名是用戶為該類所起的名字,它應(yīng)該是一個合法的標識符,并盡量遵從命名約定(如類名的第一個字母一般為大寫)。Java類定義格式包括類聲明和類主體兩部分。類主體中的每個變量要聲明其類型;方法不僅要進行聲明,還要定義其實現(xiàn)。任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀鲱惖亩x如例4-1,定義植物分類名和編號案例來學(xué)習(xí)如何定義類,publicclassplant{ Stringname; intnumber; voidcallback(){ System.out.println("分類名"+name+"分類編號"+number); }}上述案例中定義了一個植物分類。Plant是類名,name、number是成員變量,callback()是成員方法。成員方法和成員變量的使用方法后續(xù)講解任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀龀蓡T變量與局部變量成員變量(也稱為實例變量或?qū)傩裕┦嵌x在類中的變量,它們用于存儲類的狀態(tài)或信息。每個類的實例(即類的對象)都可以有自己的成員變量值。類成員變量可以是基本數(shù)據(jù)類型(如int、double、boolean等)或引用類型(如String、ArrayList等)。類成員變量是類的組成部分,成員變量的定義語法格式如下:訪問修飾符數(shù)據(jù)類型變量名類成員變量可以通過訪問控制符來定義其訪問權(quán)限,Java提供了以下訪問控制符:public:公共訪問權(quán)限,允許在任何地方訪問。private:私有訪問權(quán)限,只能在類內(nèi)部訪問。protected:受保護的訪問權(quán)限,可以在同一個包內(nèi)或子類中訪問。默認(無修飾符):默認訪問權(quán)限,可以在同一個包內(nèi)訪問。任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀龀蓡T變量與局部變量局部變量僅作用在局部區(qū)域中,從定義開始到大括號或return結(jié)束,作用的范圍結(jié)束時變量空間會自動釋放,生命周期短。局部變量可以先定義再初始化,也可以定義的同時初始化,局部變量沒有默認初始值,必須要初始化值后才能使用。成員變量和局部變量區(qū)別如表區(qū)別成員變量局部變量作用域整個類在其所屬的方法、構(gòu)造函數(shù)或代碼塊內(nèi)存儲位置堆內(nèi)存棧內(nèi)存生命周期與對象相同,當(dāng)對象被銷毀時才會釋放僅限于其所屬方法、構(gòu)造函數(shù)或代碼塊的執(zhí)行期間類中聲明的位置類中方法外通常在方法中默認值有默認初始值(如int類型為0)沒有默認初始值,必須初始化后才能使用任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀龀蓡T變量與局部變量如例4-2,通過一個案例來學(xué)習(xí)如何定義成員變量和局部變量publicclassMyClass{ privateintmyInt;//私有整型變量

privateStringmyString;//私有字符串變量

publicdoublemyDouble;//公共雙精度浮點變量

publicvoidmyMethod(){ intnum=10;//局部變量

System.out.println(num); }}上述代碼中,定義了一個名為MyClass的類該類包含了三個成員變量,myInt、myString和myDouble;myInt、myString為類的私有變量,只能在MyClass類的內(nèi)部被訪問和修改;myDouble與前兩個變量不同,它是公共變量,因此它不僅限于MyClass類的內(nèi)部使用,可以在任何地方被訪問和修改。在myMethod()方法中,定義了一個局部變量num,該變量只能在myMethod()方法使用。任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀龀蓡T方法類成員方法是指在類內(nèi)部定義的函數(shù),用于執(zhí)行操作。類成員方法可以返回值,也可以不返回值。它們是類的操作或行為的體現(xiàn)。方法名是方法的名稱,用于標識這個方法。參數(shù)列表是指傳遞給方法的變量列表,它們用于接收傳遞給方法的值。方法體是方法執(zhí)行的代碼塊,包含方法的具體操作。成員方法的返回類型是指方法執(zhí)行后返回的值的類型,可以是基本數(shù)據(jù)類型或引用數(shù)據(jù)類型。類成員方法的定義語法格式如下訪問修飾符數(shù)據(jù)類型變量名(//參數(shù)列表){ //局部變量

//方體體}任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀龀蓡T方法類成員方法是指在類內(nèi)部定義的函數(shù),用于執(zhí)行操作。類成員方法可以返回值,也可以不返回值。它們是類的操作或行為的體現(xiàn)。方法名是方法的名稱,用于標識這個方法。參數(shù)列表是指傳遞給方法的變量列表,它們用于接收傳遞給方法的值。方法體是方法執(zhí)行的代碼塊,包含方法的具體操作。成員方法的返回類型是指方法執(zhí)行后返回的值的類型,可以是基本數(shù)據(jù)類型或引用數(shù)據(jù)類型。類成員方法的定義語法格式如下訪問修飾符數(shù)據(jù)類型變量名(//參數(shù)列表){ //局部變量

//方體體}成員方法內(nèi)部也可以定義變量,這個變量稱之局部變量,局部變量在方法被執(zhí)行時創(chuàng)建,在程序執(zhí)行結(jié)束時被銷毀,局部在使用時必須進行賦值操作或被初始化,否則會出現(xiàn)編譯錯誤,類成員方法也可以通過訪問控制符來定義其訪問權(quán)限任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀龀蓡T方法如例4-3,通過一個加法計算案例來學(xué)習(xí)如何使用成員方法publicclassCalculator{privateintresult;//私有變量,表示計算結(jié)果

//定義一個方法用于執(zhí)行加法操作

publicvoidadd(intnum1,intnum2){result=num1+num2;//輸出計算結(jié)果

System.out.println("計算結(jié)果為:"+result);}}上述代碼中,result為類的私用變量,接收加法計算結(jié)果voidadd(intnum1,intnum2)為一個公共的成員方法實現(xiàn)加法計算并計算結(jié)果輸出到輸出到控制臺。任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀鰟?chuàng)建對象在Java程序中可以使用new關(guān)鍵字創(chuàng)建對象,可分為聲明對象和實例化對象兩步實現(xiàn),具體格式如下:類名對象名稱=null;對象名稱=new類名();上述格式中,創(chuàng)建對象兩步,也可以直接通過下面的方式創(chuàng)建對象,具體格式如下:類名對象名稱=new類名();在Main函數(shù)中,使用new關(guān)鍵字創(chuàng)建Course對象publicclassMain{publicstaticvoidmain(String[]args){

Course

course1=newCourse(1,"Java編程基礎(chǔ)","張老師",199.9);System.out.println(course1.getCourseInfo());}}任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀鲈L問對象的屬性和方法在創(chuàng)建對象后,可以使用對象訪問類中的某個屬性或方法,對象屬性和方法的訪問通過“.”運算符實現(xiàn),具體格式如下:對象名稱.屬性名對象名稱.方法名上述語法格式中的“.”是成員運算符,它把對象名和成員名連接起來,指明是哪個對象的哪個成員。在所有的運算符中“.”運算符的優(yōu)先級別最高。publicclassMain{publicstaticvoidmain(String[]args){

Course

course1=newCourse(1,"Java編程基礎(chǔ)","張老師",199.9);System.out.println(course1.getCourseInfo());}}任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀鲈L問對象的屬性和方法如例4-4案例,來學(xué)習(xí)如何訪問對象的屬性和方法,詳見Student.java1 publicclassStudent{2 //成員變量3 Stringname;4 Stringsubject;5 //成員方法6 publicvoidstudy(){7 System.out.println(name+"學(xué)習(xí)的是Java程序設(shè)計課程。");8 }9 publicvoiddoSomething(){10 System.out.println(subject+"的階段性成績優(yōu)秀。");11 }12 //訪問學(xué)生13 publicstaticvoidmain(String[]args){14 //創(chuàng)建對象15 Students=newStudent();16 //使用對象17

="林*霞";18 s.subject="軟件應(yīng)用技術(shù)";19 System.out.println(+","+s.subject);20 s.study();21 s.doSomething();22 }23 }任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀鲈L問對象的屬性和方法例4-4代碼中,定義了兩個類,Student類為實體類,共有2個字符型成員變量name、subject,用來描述的實體的屬性和行為;Student為主類,其中包含一個main()方法,該方法創(chuàng)建了1個Student類對象,并打印出學(xué)習(xí)和成績狀態(tài)的學(xué)習(xí)信息。兩個類可以分別存放在兩個的源程序文件中,也可以存放在同一個文件。運行結(jié)果任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀鰳?gòu)造方法構(gòu)造方法是類的一個特殊成員,它會在類實例化對象時被自動調(diào)用,用于創(chuàng)建對象并初始化其成員變量。每個類都有至少一個構(gòu)造函數(shù),當(dāng)使用new關(guān)鍵字創(chuàng)建一個類的實例時,Java虛擬機會調(diào)用相應(yīng)的構(gòu)造函數(shù)來為對象分配內(nèi)存空間,并設(shè)置成員變量的初始值。構(gòu)造函數(shù)的定義語法格式如下訪問修飾符類名(//參數(shù)列表){//構(gòu)造函數(shù)體}在一個類中定義的方法如果同時滿足以下三個條件,該方法稱為構(gòu)造方法,具體如下:方法名與類名相同在方法名的前面沒有返回值類型的聲明構(gòu)造方法可以被重載(即可以有多個構(gòu)造方法,只要它們的參數(shù)列表不同)。在方法中不能使用return語句返回一個值,但是可以單獨寫return語句作為方法的結(jié)束。任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀鰳?gòu)造方法-無參構(gòu)造方法不帶任何參數(shù)的構(gòu)造方法被稱為無參構(gòu)造方法。如果一個類沒有顯式地定義任何構(gòu)造方法,那么編譯器會自動為它提供一個無參構(gòu)造方法。但是,一旦類中顯式地定義了任何構(gòu)造方法(無論是有參還是無參),編譯器就不會再自動提供無參構(gòu)造方法,如下例publicclassMyClass{privateintvalue;//無參構(gòu)造方法

publicMyClass(){this.value=0;//初始化value為0}}任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀鰳?gòu)造方法-有參構(gòu)造方法有參構(gòu)造方法接受一個或多個參數(shù),并在創(chuàng)建對象時用于初始化對象的狀態(tài)。通過有參構(gòu)造方法,可以在創(chuàng)建對象時直接設(shè)置其屬性,而無需在創(chuàng)建后再進行額外的設(shè)置,如下例publicclassMyClass{privateintvalue;//有參構(gòu)造方法

publicMyClass(intvalue){this.value=value;//使用傳入的參數(shù)初始化value}}任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀鰳?gòu)造方法-構(gòu)造方法重載Java中允許在一個類中定義多個構(gòu)造方法,與普通方法一樣,構(gòu)造方法也可以重載,它們具有相同的名稱(即類名)但不同的參數(shù)列表。在創(chuàng)建對象時,可以通過調(diào)用不同的構(gòu)造方法來創(chuàng)建類的實例,為不同的屬性進行賦值,如下例publicclassPerson{privateStringname;privateintage;//無參構(gòu)造方法

publicPerson(){="Unknown";this.age=0;}

//帶一個參數(shù)的構(gòu)造方法

publicPerson(Stringname){=name;this.age=0;//或者設(shè)置為某個默認值

}

//帶兩個參數(shù)的構(gòu)造方法

publicPerson(Stringname,intage){=name;this.age=age;}

//其他方法和屬性...}任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-面向?qū)ο缶幊谈攀鰳?gòu)造方法-構(gòu)造方法重載如例4-5,通過一個算術(shù)計算案例來演示如何在類中定義構(gòu)造方法的使用,詳見Calculator.java1 publicclassCalculator{2 //定義成員變量用于存儲加法和減法的結(jié)果3 privateintsum;4 privateintdifference;5 6 //構(gòu)造函數(shù),用于創(chuàng)建Calculator對象時初始化屬性7 publicCalculator(intnum1,intnum2){8 //計算加法結(jié)果9 sum=num1+num2;10 //計算減法結(jié)果11 difference=num1-num2;12 //輸出計算結(jié)果13 System.out.println("加法結(jié)果:"+sum);14 System.out.println("減法結(jié)果:"+difference);15 }16 //主方法,用于測試Calculator類17 publicstaticvoidmain(String[]args){18 //創(chuàng)建Calculator對象19 Calculatorcalculator=newCalculator(5,3);20 }21 }上述代碼中,Calculator類定義了兩個私有成員變量sum和difference,分別用于存儲加法和減法的結(jié)果。并定義了一個構(gòu)造函數(shù),它接受兩個整數(shù)參數(shù)num1和num2,并在構(gòu)造函數(shù)中執(zhí)行加法和減法計算,然后輸出到控制臺。其運行結(jié)果任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-任務(wù)實現(xiàn)1.創(chuàng)建OnlineCourse類,聲明包含課程課程名、教師、時長、價格等信息的成員變量。2.定義無參構(gòu)造方法,初始化默認課程信息,定義有參構(gòu)造方法,使用參數(shù)初始化課程信息。3.定義displayCourseInfo()方法,輸出課程信息。4.在main方法中創(chuàng)建OnlineCourse對象。5.使用無參構(gòu)造方法和有參構(gòu)造方法創(chuàng)建OnlineCourse對象,調(diào)用displayCourseInfo()方法輸出課程信息。代碼參考教材中的OnlineCourse.java任務(wù)4-1在線課程管理系統(tǒng)-設(shè)計課程類-任務(wù)實現(xiàn)在上述代碼中,使用面向?qū)ο缶幊痰姆绞?,通過OnlineCourse類封裝課程信息,并使用的構(gòu)造方法和成員方法,創(chuàng)建和管理課程信息。最后通過displayCourseInfo()方法將課程信息輸出到控制臺。運行結(jié)果如圖02任務(wù)4-2在線課程管理系統(tǒng)-課程選課引用成員變量

調(diào)用成員方法調(diào)用構(gòu)造方法靜態(tài)變量

靜態(tài)方法靜態(tài)代碼塊任務(wù)4-2在線課程管理系統(tǒng)-課程選課-this關(guān)鍵字this關(guān)鍵字在Java中總是引用當(dāng)前對象。在類的內(nèi)部可以使用this作前綴引用成員變量、調(diào)用成員方法和構(gòu)造方法,以便分辨成員變量與局部變量Java中的this關(guān)鍵字主要作用主要有以下3種。使用this關(guān)鍵字調(diào)用本類中的屬性。this關(guān)鍵字調(diào)用成員方法。使用this關(guān)鍵字調(diào)用本類的構(gòu)造方法。任務(wù)4-2在線課程管理系統(tǒng)-課程選課-this關(guān)鍵字引用成員變量方法中定義和成員變量同名的變量時,為了區(qū)分成員變量和局部變量,在成員變量前加上前綴this調(diào)用被隱藏的成員變量。其語法格式如下:this.成員變量名調(diào)用成員方法在一個類的方法中調(diào)用另一個方法時,可以使用this來引用當(dāng)前對象,其語法格式如下:this.成員方法名(參數(shù)列表)調(diào)用構(gòu)造方法在一個構(gòu)造方法中調(diào)用另一個構(gòu)造方法,以減少代碼重復(fù)和提高代碼的可讀性,其語法格式如下:this.構(gòu)造方法名(參數(shù)列表)任務(wù)4-2在線課程管理系統(tǒng)-課程選課-this關(guān)鍵字this關(guān)鍵字調(diào)用構(gòu)造方法時:在構(gòu)造方法中使用this關(guān)鍵字時,必須作為構(gòu)造方法的第一條語句。只能在構(gòu)造方法中使用this關(guān)鍵字來調(diào)用所在類中的其它構(gòu)造方法。只能使用this關(guān)鍵字調(diào)用其它構(gòu)造方法,而不能使用方法名直接調(diào)用構(gòu)造方法。任務(wù)4-2在線課程管理系統(tǒng)-課程選課-this關(guān)鍵字如例4-6,演示this關(guān)鍵字使用方法,詳見ThisPersonDemo.java1 publicclassThisPersonDemo{2 //實例變量3 privateStringname;4 privateintage;5 6 //構(gòu)造方法17 publicThisPersonDemo(Stringname,intage){8 //使用this調(diào)用另一個構(gòu)造方法9 this(name);10 //設(shè)置age11 this.age=age;12 }13 14 //構(gòu)造方法215 publicThisPersonDemo(Stringname){16 //使用this引用實例變量name17 =name;

//這里不設(shè)置age,//因為只有一個參數(shù)的構(gòu)造方法通常用于部分初始化19 }20 21 //成員方法22 publicvoidintroduce(){23 //使用this引用實例變量name和age24 System.out.println("姓名:"++"年齡:"+this.age);25 }26 27 //另一個成員方法,用于修改name28 publicvoidsetName(StringnewName){29 //使用this引用實例變量name并修改它30 =newName;31 }32 publicstaticvoidmain(String[]args){33 //創(chuàng)建Person對象,使用兩個參數(shù)的構(gòu)造方法34 ThisPersonDemoperson=newThisPersonDemo("章*敏",30);35 //調(diào)用introduce方法36 roduce();37 //修改name并再次調(diào)用introduce方法38 person.setName("張*敏");39 roduce();40 }41 }任務(wù)4-2在線課程管理系統(tǒng)-課程選課-this關(guān)鍵字如例4-6代碼中,它有兩個實例變量:name和age;兩個構(gòu)造方法,一個接收兩個參數(shù)(name和age),另一個只接收一個參數(shù)(name);在接收兩個參數(shù)的構(gòu)造方法中,我們使用this(name)來調(diào)用接收一個參數(shù)的構(gòu)造;方法在introduce方法中,我們使用和this.age來引用實例變量,并打印出自我介紹;在setName方法中,我們使用來引用實例變量并修改它;在main方法中,我們創(chuàng)建了一個Person對象,并調(diào)用了它的方法,以演示this關(guān)鍵字在類中的使用,其運行結(jié)果任務(wù)4-2在線課程管理系統(tǒng)-課程選課-static關(guān)鍵字static關(guān)鍵字用于修飾類的成員,如成員變量、成員方法以及代碼塊,使其屬于類本身,而不是類的實例。被static修改的成員具備一些特殊性,這意味著靜態(tài)成員可以在不創(chuàng)建類的實例的情況下被訪問,并且所有類的實例共享相同的靜態(tài)成員任務(wù)4-2在線課程管理系統(tǒng)-課程選課-static關(guān)鍵字靜態(tài)變量(StaticFields)是類級別的變量,它們屬于類本身,而不是類的實例。所有類的實例共享同一個靜態(tài)變量。定義:使用static關(guān)鍵字定義的變量稱為靜態(tài)變量。訪問:靜態(tài)變量可以通過類名直接訪問,而不需要創(chuàng)建類的實例。初始化:靜態(tài)變量在類加載時被初始化,它們在程序運行期間一直存在。內(nèi)存分配:靜態(tài)變量在方法區(qū)中分配內(nèi)存,而不是在堆中。靜態(tài)變量可以使用“類名.變量名”的形式來訪問靜態(tài)變量任務(wù)4-2在線課程管理系統(tǒng)-課程選課-static關(guān)鍵字如例4-7,演示靜態(tài)變量使用方法,詳見StaticvarCourse.java靜態(tài)變量1 publicclassStaticvarCourse{3 publicStringcourseName;4 publicdoubleprice;5 publicstaticintcourseCount=0;//靜態(tài)變量,用于跟蹤課程數(shù)量 7 publicStaticvarCourse(StringcourseName,doubleprice){8 this.courseName=courseName;9 this.price=price;10 courseCount++;//每次創(chuàng)建對象時,課程數(shù)量增加11 }13 publicstaticvoidmain(String[]args){14 StaticvarCoursecs=newStaticvarCourse("java",25);15 StaticvarCoursecs2=newStaticvarCourse("java",25);16 System.out.println("創(chuàng)建了"+courseCount+"個NewCourse對象。");17 }19 }任務(wù)4-2在線課程管理系統(tǒng)-課程選課-static關(guān)鍵字如例4-7代碼定義了一個Course類,包含三個屬性:courseName、price和一個靜態(tài)變量courseCount,用來跟蹤創(chuàng)建的課程數(shù)量。每次創(chuàng)建Course類的實例時,構(gòu)造函數(shù)都會被調(diào)用,courseCount會遞增,其運行結(jié)果靜態(tài)變量任務(wù)4-2在線課程管理系統(tǒng)-課程選課-static關(guān)鍵字在實際開發(fā)時,如需要在不創(chuàng)建對象的情況下就可以使用某個方法,即可static關(guān)鍵字修飾該類,通常稱這種方法為靜態(tài)方法。靜態(tài)方法也稱為類方法,它屬于類本身,而不是類的任何實例。靜態(tài)方法不能訪問實例變量,因為它不與任何特定實例相關(guān)聯(lián)。靜態(tài)方法可以通過類名直接調(diào)用,無需創(chuàng)建類的實例。同靜態(tài)變量一樣,靜態(tài)方法可以使用“類名.方法名”的方式來訪問,也可以通過類的實例使用對象來訪問靜態(tài)方法靜態(tài)方法任務(wù)4-2在線課程管理系統(tǒng)-課程選課-static關(guān)鍵字靜態(tài)方法如例4-8,演示靜態(tài)方法使用方法,詳見StaticmothCourse.java1 publicclassStaticmothCourse{2 publicStringcourseName;3 publicdoubleprice;4 publicstaticintcourseCount=0;//靜態(tài)變量,用于跟蹤課程數(shù)量5 publicStaticmothCourse(StringcourseName,doubleprice){6 this.courseName=courseName;7 this.price=price;8 courseCount++;//每次創(chuàng)建對象時,課程數(shù)量增加9 }10 //靜態(tài)方法11 publicstaticvoidprintCount(){12 System.out.println("創(chuàng)建了"+courseCount+"個NewCourse對象。");13 }14 publicstaticvoidmain(String[]args){15 StaticmothCoursecs=newStaticmothCourse("java",25);16 StaticmothCoursecs2=newStaticmothCourse("java",25);17 StaticmothCourse.printCount();18 }19 }任務(wù)4-2在線課程管理系統(tǒng)-課程選課-static關(guān)鍵字如例4-8代碼包含一個靜態(tài)變量courseCount和一個靜態(tài)方法printCount()。printCount()用于打印創(chuàng)建的Course對象的數(shù)量。由于courseCount是一個靜態(tài)變量,它被所有Course對象共享,因此無論創(chuàng)建多少個Course對象,courseCount的值都會增加,其運行結(jié)果如圖靜態(tài)方法任務(wù)4-2在線課程管理系統(tǒng)-課程選課-static關(guān)鍵字在Java類中,使用一對大括號包圍起來的若干行代碼被稱為一個代碼塊,用static關(guān)鍵字修飾的代碼塊稱為靜態(tài)代碼塊。當(dāng)類被加載時,靜態(tài)代碼塊會執(zhí)行,由于類只加載一次,因此靜態(tài)代碼塊只執(zhí)行一次。靜態(tài)代碼塊在類加載時執(zhí)行,且只執(zhí)行一次。靜態(tài)代碼塊通常用于初始化靜態(tài)變量或執(zhí)行其他一次性操作。靜態(tài)代碼塊任務(wù)4-2在線課程管理系統(tǒng)-課程選課-static關(guān)鍵字靜態(tài)代碼塊如例4-9,使用對象來訪問靜態(tài)代碼塊的使用方法,詳見StaticblockCOurse.java1 publicclassStaticblockCOurse{2 privateStringname;3 privatedoubleprice;4 //課程總數(shù),使用static關(guān)鍵字修飾,屬于類變量5 privatestaticinttotalCourses;6 //靜態(tài)代碼塊,在類加載時執(zhí)行一次,用于初始化課程總數(shù)7 static{8 System.out.println("初始化課程系統(tǒng)...");9 totalCourses=0;10 }11 //構(gòu)造函數(shù),創(chuàng)建課程對象時,課程總數(shù)遞增12 publicStaticblockCOurse(Stringname,doubleprice){13 =name;14 this.price=price;15 totalCourses++;16 }17 publicstaticintgetTotalCourses(){18 returntotalCourses;19 }20 publicstaticvoidmain(String[]args){21 StaticblockCOursecourse1=newStaticblockCOurse("Java",99);22 StaticblockCOursecourse2=newStaticblockCOurse("Python",120);23 StaticblockCOursecourse3=newStaticblockCOurse("Web",799);24 System.out.println("總課程數(shù):"+StaticblockCOurse.getTotalCourses());25 }26 }任務(wù)4-2在線課程管理系統(tǒng)-課程選課-static關(guān)鍵字如例4-9代碼中,靜態(tài)代碼塊static{...}代碼塊在StaticblockCOurse類加載時執(zhí)行一次,用于初始化totalCourses變量為0,并輸出"初始化課程系統(tǒng)..."信息。構(gòu)造函數(shù)和getTotalCourses()方法,與之前代碼相同,構(gòu)造函數(shù)用于創(chuàng)建課程對象,并在每次創(chuàng)建時遞增totalCourses計數(shù)。getTotalCourses()方法用于獲取當(dāng)前所有課程信息和課程總數(shù),其運行結(jié)果如圖靜態(tài)代碼塊任務(wù)4-2在線課程管理系統(tǒng)-課程選課-任務(wù)實現(xiàn)1.在主類中使用while、for循環(huán)實現(xiàn)主菜單和顯示課程列表功能,允許用戶多次執(zhí)行選課系統(tǒng)的操作,使用switch語句處理用戶的選擇,根據(jù)不同的選項調(diào)用相應(yīng)的功能。2.定義課程類,包含了課程的名稱(name)、授課教師(teacher)和價格(price),和獲取課程信息的方法(getCourseInfo),用于在課程列表和購物車中顯示課程信息。3.定義購物車類,購物車使用單例模式,應(yīng)用程序中只有一個購物車實例并限定購車中課程總量;使用數(shù)組和變量實現(xiàn)用戶選擇課程并記錄課程數(shù)量和總價;4.添加課程到購物車,根據(jù)所選擇課程列表中課程編號,將課程編信息添加都購物車中。5.顯示購物車,打印購物車中已選課程信息。6.結(jié)算,打印購車中的課程清單,并清空購物車。代碼參考教材中的CourseCart.java任務(wù)4-2在線課程管理系統(tǒng)-課程選課-任務(wù)實現(xiàn)案例代碼中主要包括三個類:Course、ShoppingCart和CourseCart。Course類,表示課程信息,包括課程名、授課教師和價格等屬性,以及獲取這些屬性的方法;ShoppingCart類,表示購物車,使用單例模式實現(xiàn),確保整個程序中只有一個購物車實例。購物車中可以存儲最多3門課程,提供添加課程、顯示購物車內(nèi)容和結(jié)算等功能;CourseCart主類,首先創(chuàng)建一組課程信息,然后創(chuàng)建一個購物車實例和購物車主菜單及主菜單的操作功能處理。其運行結(jié)果03任務(wù)4-3在線課程管理系統(tǒng)-課程信息封裝應(yīng)用封裝的概念封裝實現(xiàn)和訪問控制任務(wù)4-3在線課程管理系統(tǒng)-課程信息封裝應(yīng)用-封裝和訪問控制封裝(Encapsulation)是面向?qū)ο缶幊蹋∣OP)的核心概念之一,它指的是將數(shù)據(jù)(屬性)和方法(行為)封裝在一起,使得外部無法直接訪問和修改對象的內(nèi)部狀態(tài)。在Java中,封裝是通過訪問控制符來實現(xiàn)的,它將類成員的訪問權(quán)限控制在一定的范圍內(nèi)。封裝的作用主要體現(xiàn)在以下幾個方面:提高代碼的安全性:通過封裝,可以防止外部直接訪問和修改對象的內(nèi)部狀態(tài),從而保護數(shù)據(jù)的安全性和完整性。提高代碼的可維護性:封裝使得代碼的組織更加清晰,便于理解和維護。提高代碼的可擴展性:封裝使得類的設(shè)計更加模塊化,方便后續(xù)的擴展和修改。封裝的概念任務(wù)4-3在線課程管理系統(tǒng)-課程信息封裝應(yīng)用-封裝和訪問控制所謂類的封裝是指在定義一個類時,使用private關(guān)鍵字對類中的屬性進行私有化修飾,私有屬性只能在其所在類中被訪問,如果外界想要訪問私有屬性,需要設(shè)計一個或多個使用public修飾的公有方法,其中包括用于獲取屬性值的getter方法和設(shè)置屬性值的setter方法。類的封裝任務(wù)4-3在線課程管理系統(tǒng)-課程信息封裝應(yīng)用-封裝和訪問控制類的成員除了屬性、方法、代碼塊外,還可以有內(nèi)部類。內(nèi)部類也就是定義在類中的類,與類的屬性、方法和代碼快同等級。相對內(nèi)部類,定義該內(nèi)部類的類稱為外部類。它與外部類關(guān)聯(lián),可以訪問外部類的成員。內(nèi)部類可以提高代碼的封裝性和組織性,通常用于實現(xiàn)封裝和隱藏實現(xiàn)細節(jié)。創(chuàng)建內(nèi)部類對象的語法格式如下:外部類名.內(nèi)部類名引用變量名=new外部類名().new內(nèi)部類名()內(nèi)部類和外部類任務(wù)4-3在線課程管理系統(tǒng)-課程信息封裝應(yīng)用-封裝和訪問控制內(nèi)部類分為幾種類型:成員內(nèi)部類:定義在外部類的成員位置,成員內(nèi)部類可以無條件訪問外部類的所有成員屬性和成員方法(包括private成員和靜態(tài)成員)。靜態(tài)內(nèi)部類:定義在外部類的靜態(tài)成員位置。靜態(tài)內(nèi)部類是不需要依賴于外部類的,這點和類的靜態(tài)成員屬性有點類似,并且它不能使用外部類的非static成員變量或者方法,這點很好理解,因為在沒有外部類的對象的情況下,可以創(chuàng)建靜態(tài)內(nèi)部類的對象,如果允許訪問外部類的非static成員就會產(chǎn)生矛盾,因為外部類的非static成員必須依附于具體的對象。匿名內(nèi)部類:沒有名字的內(nèi)部類,通常用于實現(xiàn)接口或繼承抽象類。局部內(nèi)部類:定義在方法內(nèi)部。成員內(nèi)部類的區(qū)別在于局部內(nèi)部類的訪問僅限于方法內(nèi)或者該作用域內(nèi)內(nèi)部類和外部類任務(wù)4-3在線課程管理系統(tǒng)-課程信息封裝應(yīng)用-封裝和訪問控制如例4-10,封裝訪問的基本用法,詳見OuterClass.java內(nèi)部類和外部類1 publicclassOuterClass{2 privateintprice=257;//外部類的私有成員3 publicclassInnerClass{4 //內(nèi)部類的方法可以直接訪問外部類的成員5 voidaccessOuterField(){6 System.out.println("內(nèi)部類訪問外部類的私有成員:"+price);7 }8 }9 publicstaticvoidmain(String[]args){10 OuterClassouter=newOuterClass();//創(chuàng)建外部類對象11 //創(chuàng)建內(nèi)部類對象12 OuterClass.InnerClassinner=outer.newInnerClass();13 inner.accessOuterField();//調(diào)用內(nèi)部類方法訪問外部類私有成員14 }15 }任務(wù)4-3在線課程管理系統(tǒng)-課程信息封裝應(yīng)用-封裝和訪問控制通過訪問控制符來限制外部對類成員的直接訪問,從而保護數(shù)據(jù)的安全性和完整性。以下是封裝實現(xiàn)的基本操作方法和步驟:1.使用訪問控制符2.定義私有成員變量3.提供公共的getter和setter方法4.封裝內(nèi)部實現(xiàn)細節(jié)5.構(gòu)造方法初始化封裝實現(xiàn)任務(wù)4-3在線課程管理系統(tǒng)-課程信息封裝應(yīng)用-封裝和訪問控制1.使用訪問控制符使用訪問控制符(public、private、protected)來控制類成員的訪問權(quán)限。public:允許在任何地方訪問。private:只能在類內(nèi)部訪問。protected:可以在同一個包內(nèi)或子類中訪問。2.定義私有成員變量在類內(nèi)部,將屬性聲明為私有(private),以限制外部對它們的直接訪問。privateintage;privateStringname;封裝實現(xiàn)任務(wù)4-3在線課程管理系統(tǒng)-課程信息封裝應(yīng)用-封裝和訪問控制3.提供公共的getter和setter方法為了允許外部訪問和修改私有成員變量的值,需要提供公共的getter和setter方法。封裝實現(xiàn)publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){=name;}任務(wù)4-3在線課程管理系統(tǒng)-課程信息封裝應(yīng)用-封裝和訪問控制4.封裝內(nèi)部實現(xiàn)細節(jié)如果類中包含內(nèi)部實現(xiàn)細節(jié),可以將這些細節(jié)封裝在一個內(nèi)部類中,以提高代碼的模塊性和可維護性。privateclassInternalClass{//內(nèi)部類成員變量和方法}5.構(gòu)造方法初始化在構(gòu)造方法中初始化私有成員變量的值,確保對象創(chuàng)建時具有初始狀態(tài)。publicMyClass(intage,Stringname){this.age=age;=name;}封裝實現(xiàn)1.創(chuàng)建外部類和外部類構(gòu)造方法,定義一個名為OnlineCourse的外部類,用于存儲課程信息和初始化課程信息及獲取和設(shè)置課程名、教師名和價格的公共方法。2.定義私有屬性,在OnlineCourse類中定義三個私有屬性:課程名、教師名和價格。3.創(chuàng)建內(nèi)部類,在OnlineCourse類內(nèi)部,定義一個名為CourseEvaluation的內(nèi)部類和構(gòu)造方法,用于存儲課程評價信息和初始化評價信息。4.內(nèi)部類方法:在CourseEvaluation類定義兩個方法:getEvaluation()和setEvaluation(),分別用于獲取和設(shè)置評價信息。其中g(shù)etEvaluation()返回一個新的CourseEvaluation對象,setEvaluation()方法只允許設(shè)置好評。。5.在main方法中,創(chuàng)建一個OnlineCourse對象,使用封裝、內(nèi)部類和外部類的基本操作修改教師姓名和課程價格,并在控制臺打印修改后的信息。代碼參考教材中的OnlineCoursePacking.java任務(wù)4-3在線課程管理系統(tǒng)-課程信息封裝應(yīng)用-任務(wù)實現(xiàn)案例代碼中,通過外部類OnlineCourse,我們可以存儲和管理在線課程的信息。內(nèi)部類CourseEvaluation用于存儲課程評價信息,并提供了獲取和設(shè)置評價信息的方法。主方法main用于創(chuàng)建OnlineCourse對象,并演示了如何使用這些方法來獲取和修改課程信息,其運行結(jié)果任務(wù)4-3在線課程管理系統(tǒng)-課程信息封裝應(yīng)用-任務(wù)實現(xiàn)04任務(wù)4-4模擬銀行理財存款繼承的機制super關(guān)鍵字方法重寫final關(guān)鍵字抽象類接口異常類異常處理機制自定義異常創(chuàng)建包package關(guān)鍵字import關(guān)鍵字包的訪問控制任務(wù)4-4模擬銀行理財存款-繼承Java中,繼承是根據(jù)現(xiàn)有類創(chuàng)建新的類,由繼承而得到的新類稱為子類或派生類,被繼承的類稱為父類或者基類。Java是單繼承,也就是只有一個父類,系統(tǒng)默認該類繼承Object類。也就是Java中所有的類都是Object類的子類。類繼承語法格式如下:修飾符class子類名extends父類名{

類成員;}繼承的機制任務(wù)4-4模擬銀行理財存款-繼承運用Java繼承機制來改進任務(wù)4-4中的OnlineCourse類,定義一個新的VIPCourse類,代碼如下繼承的機制publicclassVIPCourseextendsOnlineCourse{privateStringextraBenefit;//VIP課程的額外福利

//構(gòu)造方法:初始化VIP課程信息

publicVIPCourse(StringcourseName,StringteacherName,doubleprice,StringextraBenefit){super(courseName,teacherName,price);//調(diào)用父類的構(gòu)造方法

this.extraBenefit=extraBenefit;}//.....其他}VIPCourse是OnlineCourse的一個子類,它繼承了OnlineCourse的所有屬性和方法。VIPCourse引入了新的私有屬性extraBenefit來表示VIP課程的額外福利。VIPCourse有自己的構(gòu)造函數(shù),用于初始化其特有的屬性以及從父類繼承來的屬性。構(gòu)造函數(shù)通過調(diào)用父類的構(gòu)造函數(shù)super(courseName,teacherName,price)來確保所有從OnlineCourse繼承的屬性也被正確地初始化。任務(wù)4-4模擬銀行理財存款-繼承super關(guān)鍵字用于訪問父類的成員,包括構(gòu)造方法、方法和變量。當(dāng)子類繼承父類時,super關(guān)鍵字是用來調(diào)用父類的構(gòu)造方法、方法和變量的。在上一小節(jié)中的OnlineCourse類的構(gòu)造函數(shù)中使用super調(diào)用父類的構(gòu)造方法super關(guān)鍵字主要有以下兩種用途。調(diào)用父類的構(gòu)造器:super(參數(shù));訪問隱藏的成員:super.屬性名; super.方法名();super關(guān)鍵字任務(wù)4-4模擬銀行理財存款-繼承this和super關(guān)鍵字兩者的區(qū)別如表super關(guān)鍵字

this關(guān)鍵字Super關(guān)鍵字成員變量訪問本類中的成員變量,如果沒有則從父類中繼續(xù)查找直接訪問父類中的成員變量構(gòu)造方法調(diào)用本類的構(gòu)造方法,必須放在構(gòu)造方法的首行調(diào)用父類的構(gòu)造方法,必須放在子類構(gòu)造方法的首行成員方法訪問本類中的成員方法,如果沒有則從父類中繼續(xù)查找直接訪問父類中的成員方法任務(wù)4-4模擬銀行理財存款-繼承如例4-11,以O(shè)nlineCourse類為基礎(chǔ),使用super關(guān)鍵字定義VIP課程示例,詳見VIPOnlineCourse.javasuper關(guān)鍵字1 publicclassVIPOnlineCourseextendsOnlineCourse{2 //有參構(gòu)造方法3 publicVIPOnlineCourse(Stringname,Stringteacher,intduration,doubleprice){4 super(name,teacher,duration,price);5 }6 //輸出課程信息7 @Override8 publicvoiddisplayCourseInfo(){9 super.displayCourseInfo();10 }11 publicstaticvoidmain(String[]args){12 //使用有參構(gòu)造方法創(chuàng)建VIPCourse對象13 VIPOnlineCoursevipCourse=newVIPOnlineCourse("Java微服務(wù)應(yīng)用開發(fā)","李老師",240,199.0);14 vipCourse.displayCourseInfo();15 }16 }任務(wù)4-4模擬銀行理財存款-繼承在上述的代碼中,定義一個名為VIPCourse的類,該類繼承自O(shè)nlineCourse類。使用super關(guān)鍵字調(diào)用了父類OnlineCourse的構(gòu)造方法,以便在創(chuàng)建VIPCourse對象時可以設(shè)置課程名稱、講師姓名、課程時長和課程價格。通過這種方式,我們實現(xiàn)了VIP課程對普通課程的繼承,并且可以在子類中添加新的屬性和方法。其運行結(jié)果如圖super關(guān)鍵字任務(wù)4-4模擬銀行理財存款-繼承在繼承關(guān)系中,子類會自動繼承父類中定義的方法,但有時在子類中需要對繼承的方法進行一些修改,即對父類的方法進行重寫。方法重寫(Override)要求子類的方法類型與父類方法類型相同或者是父類子類型,并且該方法的名字、參數(shù)與父類相同。子類中重寫父類中的方法,相當(dāng)于替換掉了父類的方法,在子類中不增加方法。子類可以通過方法重寫來改進繼承來的方法,以便滿足自己的要求。使用方法重寫時應(yīng)該注意以下事項:子類不能重寫父類的final方法;子類不能重寫父類的私有方法;子類重寫的方法必須具有相同的訪問權(quán)限或更寬松的訪問權(quán)限。方法重寫任務(wù)4-4模擬銀行理財存款-繼承方法重寫如例4-12,以O(shè)nlineCourse類為基礎(chǔ),重寫父類的方式重寫VIP課程好評,詳見VIPCourseOverride.java1 publicclassVIPCourseOverrideextendsOnlineCourse{2 Stringevaluation;3 doublevipPrice;4 //有參構(gòu)造方法5 publicVIPCourseOverride(Stringname,Stringteacher,intduration,doubleprice,Stringevaluation,doublevipPrice){6 super(name,teacher,duration,price);7 this.evaluation=evaluation;8 this.vipPrice=vipPrice;9 }10 //輸出課程信息11 @Override12 publicvoiddisplayCourseInfo(){13 super.displayCourseInfo();14 System.out.println("課程評價:"+evaluation);15 System.out.println("VIP會員價格:"+vipPrice+"元");16 }17 publicstaticvoidmain(String[]args){18 //使用有參構(gòu)造方法創(chuàng)建VIPCourseOverride對象19 VIPCourseOverridevipCourse=newVIPCourseOverride("Python數(shù)據(jù)分析","王老師",340,210.0,"非常好",180.0);20 vipCourse.displayCourseInfo();21 }22 }任務(wù)4-4模擬銀行理財存款-繼承方法重寫在上述的例子中,在上述的代碼中,定義VIPCourseOverride類,該類繼承自O(shè)nlineCourse類。并在VIPCourseOverride類的重寫了構(gòu)造方法,增加課程評價(String類型)和會員價格(double類型)參數(shù),最后重寫課程信息顯示方法displayCourseInfo(),顯示修改后的VIP課程信息。其運行結(jié)果如圖任務(wù)4-4模擬銀行理財存款-繼承在Java中,final關(guān)鍵字用于限定類、方法和變量,以實現(xiàn)不可變性和限制繼承,因此被final修飾的類、變量和方法將具有以下特性:final修飾的類不能被繼承。其語法格式如下:finalclassFinalClass{//類體}final修飾的方法不能被子類重寫。其語法格式如下:publicfinalvoidfinalMethod(){//方法體}final修飾的變量(成員變量和局部變量)是常量,只能賦值一次。其語法格式如下:finalintfinalVariable=10;final關(guān)鍵字任務(wù)4-4模擬銀行理財存款-繼承final關(guān)鍵字的一些常用應(yīng)用場景類不可變類:如果一個類不需要被繼承,那么可以將其聲明為final。這樣可以確保該類的實現(xiàn)細節(jié)不會被修改,提高代碼的安全性和穩(wěn)定性。內(nèi)部類:如果一個內(nèi)部類不需要被外部類之外的代碼使用,可以將其聲明為final,以避免外部代碼意外地繼承或修改內(nèi)部類的實現(xiàn)。輔助類:如果一個類只包含靜態(tài)方法和靜態(tài)變量,并且不需要被繼承,可以將其聲明為final,以提高代碼的可讀性和維護性。final關(guān)鍵字任務(wù)4-4模擬銀行理財存款-繼承final關(guān)鍵字的一些常用應(yīng)用場景方法私有方法:如果一個方法是私有的,并且不需要被重寫,可以將其聲明為final,以避免子類意外地覆蓋這個方法。工具方法:如果一個方法是工具類中的靜態(tài)方法,并且不需要被重寫,可以將其聲明為final,以提高代碼的可讀性和維護性。效率考慮:在某些情況下,如果重寫方法會導(dǎo)致性能問題,可以將其聲明為final,以避免子類無意中重寫這個方法。final關(guān)鍵字任務(wù)4-4模擬銀行理財存款-繼承final關(guān)鍵字的一些常用應(yīng)用場景變量常量:如果一個變量在程序運行期間不會改變,可以將其聲明為final,以提高代碼的可讀性和維護性。不可變對象:如果一個對象在創(chuàng)建后不會改變,可以將其聲明為final,以提高代碼的安全性和穩(wěn)定性。避免修改:在某些情況下,如果變量在程序運行期間不應(yīng)該被修改,可以將其聲明為final,以提高代碼的安全性和穩(wěn)定性。final關(guān)鍵字任務(wù)4-4模擬銀行理財存款-繼承如例4-13,使用final定義一個特價課程的課程信息,詳見FinalCourse.java1 publicfinalclassFinalCourse{2 privatefinalStringname;3 privatefinalStringteacher;4 privatefinalintduration;5 privatefinaldoubleprice;6 privatefinaldoublespecialPrice;7 8 //有參構(gòu)造方法9 publicFinalCourse(Stringname,Stringteacher,intduration,doubleprice,doublespecialPrice){10 =name;11 this.teacher=teacher;12 this.duration=duration;13 this.price=price;14 this.specialPrice=specialPrice;}……final關(guān)鍵字任務(wù)4-4模擬銀行理財存款-繼承上述代碼中,F(xiàn)inalCourse類被final關(guān)鍵字修飾,這意味著它不能被繼承。FinalCourse類包含了一個final關(guān)鍵字修飾的specialPrice變量,表示特價課程的價格是不可變的,其運行結(jié)果如圖final關(guān)鍵字任務(wù)4-4模擬銀行理財存款-多態(tài)Java中提供了abstract關(guān)鍵字表示抽象。抽象類(AbstractClass)是Java中用于定義一組抽象方法的類,這些方法沒有具體的實現(xiàn)。抽象類不能被實例化,只能被繼承。子類必須實現(xiàn)抽象類中定義的所有抽象方法,否則子類也必須聲明為抽象類。實現(xiàn)抽象類的語法格式具體示例如下://用abstract修飾抽象類abstractclassParent{ //abstract修飾抽象方法,只有聲明,沒有實現(xiàn)

publicabstractvoidcallback();}抽象類抽象類中可以有抽象方法和非抽象方法,抽象類不能用new關(guān)鍵字來構(gòu)造對象。抽象類的子類可以重寫父類的抽象方法,也可以繼承該抽象方法。抽象類,只關(guān)心操作,即方法名字、類型和參數(shù),不關(guān)心操作具體是怎么實現(xiàn)的。抽象類是在抽象層次上考慮類的問題,表明方法的重要性。任務(wù)4-4模擬銀行理財存款-多態(tài)抽象類的定義與使用規(guī)則如下:包含一個以上抽象方法的類必須是抽象類。抽象類和抽象方法都要使用abstract關(guān)鍵字聲明。抽象方法只需聲明而不需要實現(xiàn)。如果一個類繼承了抽象類,那么該子類必須實現(xiàn)抽象類中的全部抽象方法。抽象類任務(wù)4-4模擬銀行理財存款-多態(tài)在學(xué)習(xí)多態(tài)操作時,涉及到將子類對象當(dāng)作父類類型使用的情況,該類情況稱之為“向上轉(zhuǎn)型”,其語法格式為:父類類型對象名=new子類類型()將子類對象當(dāng)作父類使用時不需要任何顯式地聲明,單此時不能通過父類變量去調(diào)用子類中的特有方法。將一個子類對象經(jīng)過向上轉(zhuǎn)型之后當(dāng)成父類方法使用,再無法調(diào)用子類的方法,但有時候可能需要調(diào)用子類特有的方法,此時,將父類引用再還原為子類對象即可,該類情況稱之為“向下轉(zhuǎn)型”。在實際應(yīng)用開發(fā)中,向上轉(zhuǎn)型轉(zhuǎn)換通常是無害的,而向下轉(zhuǎn)型因為安全級別低使用比較少,如果出現(xiàn)轉(zhuǎn)換失敗,程序運行時就會拋出異常。Java中為了提高向下轉(zhuǎn)型的安全性,引入了instanceof,如果該表達式為true,則可以安全轉(zhuǎn)換。抽象類-向上、向下轉(zhuǎn)型任務(wù)4-4模擬銀行理財存款-多態(tài)如例4-14,利用教師和學(xué)生的主要工作為例實現(xiàn)抽象類,詳見AbstractPerson.java抽象類1 publicclassAbstractPerson{2 publicstaticvoidmain(Stringargs[]){3 Teachersteacher=newTeachers(

溫馨提示

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

評論

0/150

提交評論