




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
單元4設計應用程序的類與接口4.1引導資料階段一:類4.2[引導任務4-1]定義菜品類4.3知識解析4.4訓練任務返回下一頁單元4設計應用程序的類與接口4.1引導資料返回下一頁單元4設計應用程序的類與接口階段二:對象4.5[引導任務4-2]為菜品類添加主方法4.6知識剖析4.7訓練任務上一頁下一頁返回單元4設計應用程序的類與接口階段二:對象上一頁下一頁返回單元4設計應用程序的類與接口階段三:繼承4.8[引導任務4-3]實現餐飲管理系統消費結算功能4.9知識解析4.10訓練任務上一頁下一頁返回單元4設計應用程序的類與接口階段三:繼承上一頁下一頁返回單元4設計應用程序的類與接口階段四:接口4.11[引導任務4-4]自定義一個用于消費結算的接口4.12知識剖析4.13訓練任務上一頁返回單元4設計應用程序的類與接口階段四:接口上一頁返回4.1引導資料4.1.1面向對象的基木概念
(1)對象(Object)
對象由屬性(Attribute)和行為(Action)兩部分組成,是數據和行為的統一體。屬性是用來描述對象靜態特征的一個數據項,行為是用來描述對象動態特征的一個操作。一個對象可以是一個手機或用戶界面的一個窗口,事實上它可以是任何東西每一種對象都有各自的內部狀態和運動規律,不同對象之間的相互聯系和相互作用就構成了各種不同的系統。下一頁返回4.1引導資料4.1.1面向對象的基木概念下一頁返回4.1引導資料(2)類(Class)
共享同一屬性和方法集的所有對象的集合構成類。類是Java語言面向對象編程的基本元索,它定義了一個對象的結構和行為。它為屬于該類的全部對象提供了統一的抽象描述,其內部包括屬性和行為兩個主要部分,簡單的說類是對象集合的再抽象。類與對象的關系如同一個模具與用這個模具鑄造出來的產品之間的關系。類給出了屬于該類的全部對象的抽象定義,而對象則是符合這種定義的一個實體。上一頁下一頁返回4.1引導資料(2)類(Class)上一頁下一頁返回4.1引導資料(3)消息(message)
為了能完成固有的任務,對象需要與其他對象進行互操作,這是連接對象與外部世界的唯一通道。互操作可能發生在同一個類的不同對象之間,或是不同類的對象之間通過發送消息給其他對象,傳遞消息或請求動作,使互操作得到處理例如,當一個用戶按下鼠標,選擇了屏幕上對話框里的一個命令按鈕,一條消息就發給了對話框對象,通知它命令按鈕被按下了。消息可用來改變對象的狀態或請求該對象完成一個動作。上一頁下一頁返回4.1引導資料(3)消息(message)上一頁下一頁返4.1引導資料(4)接口(interface
接口是一個類所具有的方法的特征集合,是一種邏輯上的抽象。接口是消息的通道,通過接口,消息才能傳遞到具體的處理方法中進行處理。接口把方法的特征和方法的實現分割開來。這種分割體現在接口常常代表一個角色,它包括與該角色相關的操作和屬性,而實現這個接口的類便是扮演這個角色的演員。一個角色由不同的演員來演,而不同的演員之間除了扮演一個共同的角色之外并不要求有其他的共同之處。上一頁下一頁返回4.1引導資料(4)接口(interface上一頁下一頁4.1引導資料4.1.2面向對象的特性面向對象技術的基本特征主要有抽象性、封裝性、繼承性和多態性
(1)抽象性抽象(Abstract)是一種機制,就是忽略事物中與當前目標無關的非本質特征,更充分地注意與當前目標有關的本質特征它使得復雜的、真實世界的情況可以通過簡單的模型被表不出來,是真實世界的對象或概念的模型例如,在設計一個學生成績管理系統的過程中,考查學生李三這個對象時,就只關心他的姓名、課程、成績等,而忽略他的出生時間、視力等信息.上一頁下一頁返回4.1引導資料4.1.2面向對象的特性上一頁下一頁返回4.1引導資料(2)封裝性封裝(Encapsulation)就是把對象的屬性和行為結合成一個獨立的單位,并盡可能隱蔽對象的內部細節對相關思想的抽象被封裝在一個單元里,將抽象出來的狀態和行為結合在一個封裝的整體里,這個封裝體稱為類對系統的其他部分來說,狀態和行為的真實內部實現被隱藏起來了在Java中,通過在類定義里面來定義屬性和方法的方式強制實現封裝過程。上一頁下一頁返回4.1引導資料(2)封裝性上一頁下一頁返回4.1引導資料(3)繼承性繼承(Inheritance)是一種聯結類與類的層次模型。繼承性是指特殊類的對象擁有其一般類的屬性和行為,繼承意味著“自動地擁有”,即特殊類中不必重新定義已在一般類中定義過的屬性和行為,而它卻自動地、隱含地擁有其一般類的屬性與行為。繼承允許和鼓勵類的重用,提供了一種明確表述共性的方法一個特殊類既有自己新定義的屬性和行為,又有繼承下來的屬性和行為。盡管繼承下來的屬性和行為是隱式的,但無論在概念上還是在實際效果上,都是這個類的屬性和行為當這個特殊類又被它更下層的特殊類繼承時,它繼承來的和自己定義的屬性和行為又被下一層的特殊類繼承下去因此,繼承是傳遞的,體現了大自然中特殊與一般的關系上一頁下一頁返回4.1引導資料(3)繼承性上一頁下一頁返回4.1引導資料(4)多態性多態性(Polymorphism)是面向對象系統最終表現出來的基本特征。當使用繼承擴展通用的類來得到特殊的類時,通常也會對通用類的一些行為進行擴展。特殊類常常會實現與通用類有些差別的行為,但是行為的名字會保持一樣給定一個對象實例,正確地使用它的行為非常重要,而多態性保證這一點自動并且無縫地實現具體來說,多態性是指類中同一函數名對應多個具有相似功能的不同函數,可以使用相同的調用方式來調用這些具有不同功能的同名函數繼承性和多態性的結合,可以生成一系列雖類似但獨一無二的對象由于繼承性,這些對象共享許多相似的特征;由于多態性,釗對相同的消息,不同對象可以有獨特的表現方式,實現特性化的設計。上一頁返回4.1引導資料(4)多態性上一頁返回4.2[引導任務4一1]定義菜品類4.2.1任務要求與目標
(1)任務目標能定義類
(2)設計要求要能描述菜品的名稱、編號、單價等有關特性,并提供獲取菜的名稱、單價及編號等相關屬性的獲取與設置值的方法下一頁返回4.2[引導任務4一1]定義菜品類4.2.1任務要4.2[引導任務4一1]4.2.2實施過程在NetBeans中打開項目repast,然后在該項目中新建一個包ch04.partl,再在ch04.partl包中新建一個類TestVegtable,并為該類添加如下代碼,最后保存、編譯上一頁下一頁返回4.2[引導任務4一1]4.2.2實施過程上一頁下一頁4.2[引導任務4一1]上一頁下一頁返回4.2[引導任務4一1]上一頁下一頁返回4.2[引導任務4一1]上一頁返回4.2[引導任務4一1]上一頁返回4.3知識解析4.3.1類的聲明在Java程序里,一個類定義了一個對象的結構和它的功能,以將要表達的概念信息抽象封裝在這個類里,封裝好的各種功能稱為成員方法當Java程序運行時,系統用類來創建類的實例,類的實例就是真正的對象類定義的一般形式如下:
「訪問控制修飾]}[abstract][final]<class><類名>[extend父類][implements接口列表]「throws異常類型列表]{
類體[成員變量和成員方法]}下一頁返回4.3知識解析4.3.1類的聲明下一頁返回4.3知識解析4.3.2成員變量類的成員變量表明類的狀態,成員變量也稱為實例變量成員變量的定義格式如下:[訪問控制修飾符][static][final][transients][volatile]<數據類型><成員變量名稱>上一頁下一頁返回4.3知識解析4.3.2成員變量上一頁下一頁返回4.3知識解析4.3.3成員方法
類的方法實現了類所具有的行為,其他對象可以根據類的方法對類進行訪問成員方法的定義格式如下:[訪問控制修飾符][static][final[abstract][native][synchronized}<返回值類型><方法名>(參數表)[throws異常類型][方法體]上一頁下一頁返回4.3知識解析4.3.3成員方法上一頁下一頁返回4.3知識解析4.3.4構造方法構造方法可視為一種特殊的方法,它用于對象被創建時初始化成員變量或對象,它具有和它所在的類名完全一樣的名字構造方法定義后,創建對象時就會自動調用它構造方法沒有返}。!類型,這是因為一個類的構造方法的返回類型就是類本身在以前的大部分程序中均定義了構造方法,這些構造方法沒有定義其該完成什么工作,亦即空的構造方法,格式如下:publicclassName(){}上一頁下一頁返回4.3知識解析4.3.4構造方法上一頁下一頁返回4.3知識解析4.3.5this
在編寫類時,有時需要引用此類的方法或變量,Java通過this來實現此功能this、代表了當前對象的一個引用,可將其看做是對象的另一個名字,通過this可以在任何方法中引用當前的對象。4.3.6方法重載在Java中,同一個類中可以有2個或2個以上的方法用同一個名字,只要它們的參數。聲明或返回值類型不同,該方法就被稱為重載(overloaded),這個過程稱為方法重載(methodoverloading)方法重載是Java實現多態性的一種方式。在引導任務4-1中,有兩個一樣名字的方法TestVegtable,該方法一個帶參數,一個不帶參數,這就是一種方法重載。上一頁下一頁返回4.3知識解析4.3.5this上一頁下一頁返4.3知識解析4.3.7內部類內部類是指在某個類的內部嵌套定義的一個類,內部類可以在一個語句塊的內部定義,也可以是其他類的成員,還可以在一個表達式內部匿名定義其定義格式可表述如下:class外部類{class內部類{}}上一頁返回4.3知識解析4.3.7內部類上一頁返回4.4訓練任務
4.4.1跟我學完成引導任務4一1的程序設計與調試工作,具體內容見引導任務4一1
4.4.2自己做①創建貪吃蛇中的蛇體類為蛇體類添加相關屬性,如蛇的運動方向標識、蛇頭坐標、蛇運行速度等,同時為這些屬性提供相關的設置與獲取值的方法,參考程序見課本P61。②創建連連看圖片數據的模型類為該類添加相應的數據屬性,如游戲級別、總行數總列數、圖片數據等并要求設置這些屬性的獲取與設置值的方法,參考程序見課本P63。返回4.4訓練任務4.4.1跟我學返回4.5[引導任務4-2]為菜品類添加主方法4.5.1任務要求與目標
(1)任務目標能完成類的實例化
(2)設計要求通過TestVegtable。類的對象來獲取某一種菜的名稱、編號、單價并使其能輸出某種菜的名稱、編號、單價4.5.2實施過程①在項目repast中新建包ch04.part2,并在該包中創類建TestVegMain為該類添加如下代碼:下一頁返回4.5[引導任務4-2]為菜品類添加主方法4.5.4.5[引導任務4-2]上一頁下一頁返回4.5[引導任務4-2]上一頁下一頁返回4.5[引導任務4-2]②最后保存、編譯程序,運行結果如圖4一1所示在main方法中創建了一個TestVegtable的對象testVegtable,并通過該對象相應的get方法和set方法完成相關內容的存取上一頁返回4.5[引導任務4-2]上一頁返回4.6知識解析4.6.1對象的創建其實,將類進行實例化就產生了一個對象對象是在程序執行過程中由其所屬的類動態生成的,一個類可以生成多個不同的對象將類實例化就生成對象,并通過消息激活指定的某個類的對象的方法以改變其狀態或產生一定的行為,從而完成某一任務
Java語言中用創建實例對象的操作符new來創建對象,其格式如下:<類名><對象名>=<new><類構造法>下一頁返回4.6知識解析4.6.1對象的創建下一頁返回4.6知識解析4.6.2對象的使用對象必須在實例化之后才能夠使用,這一點與前面所說的變量一樣其實,變量也可看做是一種特殊數據類型的對象當對象實例化之后,就可以用點操作符“.”來完成對類成員變量和成員方法的訪問操作對類成員的訪問一般形式為:<對象名>.<對象所屬類中的可訪問成員>上一頁下一頁返回4.6知識解析4.6.2對象的使用上一頁下一頁返回4.6知識解析4.6.3訪問控制在講述類的成員變量和成員方法時,提到它們都具有相應的訪問控制修飾符Java規定可以選擇4種訪問方式:public,private,protected和、default它們的具體含義如表4一1所示被訪問控制修飾符修飾后的成員變量或方法所具有的訪問權限詳見表4一2(“√”表示可以訪問,“x”表示不可以訪問)上一頁下一頁返回4.6知識解析4.6.3訪問控制上一頁下一頁返回4.6知識解析4.6.4Java的垃圾回收在Java程序的生命周期中,Java運行環境提供了一個系統的垃圾回收器線程,負責自動回收那些沒有引用與之相連對象所占用的內存,這種內存回收的過程就叫垃圾回收垃圾回收機制有如下兩個好處:①它把程序員從復雜的內存追蹤、監測、釋放等工作中解放出來;②它防止了系統內存被非法釋放,從而使系統更加穩定垃圾回收機制具有以下特點:①只有當一個對象不被任何引用類型的變量使用時,它的內存才能被垃圾回收;②不能通過程序強迫垃圾回收立即執行;③當垃圾回收器將要釋放無用對象的內存時,先調用該對象的finalize()方法上一頁下一頁返回4.6知識解析4.6.4Java的垃圾回收上一4.6知識解析4.6.5static
在類的定義中,其成員變量和成員方法如果有static修飾,那么該變量或方法就稱為靜態變量或方法相反沒有static修飾的變量或方法就稱為非靜態變量或方法這種由static修飾的變量或方法不需要實例化就可以使用,是類固有的,可以直接由類引用且只有一個備份,它被所有對象共享其使用格式是:
類名.變量名或方法名上一頁下一頁返回4.6知識解析4.6.5static上一頁下一頁4.6知識解析4.6.6對象的比較在Java中我們可以用兩種方法來比較兩個對象是否相等:一是用“==”運算符;二是用equals方法該兩種方法的用法如下:①如果是基本類型比較,那么只能用==來比較,即比較基本數據類型的值;②如果是對象,則==和equal、比較的都是對象內存中的首地址(即比較引用的對象是否為同一個對象);③對于基本類型的包裝類型,比如Boolean,Character,Byte,Short,Integer,Long,Float,Double等的引用變量,==是比較地址的,而equals是比較內容的上一頁返回4.6知識解析4.6.6對象的比較上一頁返回4.7訓練任務4.7.1跟我學完成引導任務4-2的程序設計與調試工作,具體內容見引導任務4-24.7.2自己做①為貪吃蛇中的蛇體類添加主方法,以測試蛇體的速度、方向、蛇頭顏色、蛇身顏色、蛇體狀態等程序寫法參見引導任務4-2②為連連看數據模型類添加主方法,以測試連連看游戲的開始時間、游戲運行時間、游戲級別等內容程序寫法參見引導任務4-2返回4.7訓練任務4.7.1跟我學返回4.8[引導任務4一3]4.8.1任務要求與目標
(1)任務目標學會使用類的繼承與多態性
(2)設計要求當消費結算時,可不打折直接結算,也可以按會員85折、非會員95折的標準進行結算現要求用繼承來實現多種結算方式下一頁返回4.8[引導任務4一3]4.8.1任務要求與目標下一4.8[引導任務4一3]4.8.2實施過程①在項目repast中新建包ch04.part3,并在該包中新建一個TestExtendsP為該類添加如下代碼,最后保存、編譯上一頁下一頁返回4.8[引導任務4一3]4.8.2實施過程上一頁下一頁4.8[引導任務4一3]②在ch04.part3包中新建一個類TestExtMem,并為該類添加如下代碼,最后保存、編譯上一頁下一頁返回4.8[引導任務4一3]②在ch044.8[引導任務4一3]③在ch04.part3包中新建一個類TestExt,并為該類添加如下代碼,最后保存、編譯上一頁返回4.8[引導任務4一3]③在ch04.part3包中新建4.9知識解析4.9.1繼承繼承是面向對象程序設計的一個重要特征,它是通過繼承原有的類而派生出新的類,被繼承的類稱為父類,派生出的新類為子類,子類繼承父類的成員變量和成員方法,同時還可以修改父類的變量或重寫父類的方法并可以添加新的變量和方法。通過繼承可以實現代碼的復用,使程序組織層次更加清晰同時可以縮短開發周期。在Java語言中,有一個稱為Object的特殊類,所有的類都是直接或間接地繼承Object類。下一頁返回4.9知識解析4.9.1繼承下一頁返回4.9知識解析4.9.2隱藏與覆蓋在任務4一3中,類TestExtendsP,TestExtMem和TestExt中都有方法Total(),且類TPS-tExtMem和TestExt繼承了類TestExtendsP在這種情況下,即在類的繼承中,當子類的成員變量與父類的成員變量同名時,子類的成員變量會隱藏父類的成員變量;當子類的方法與父類的方法同名,參數列表、返lnt值類型相同時,子類的方法將覆蓋父類的方法;當子類重寫的方法由子類的對象調用時,它總是參考子類中的定義,父類中定義的該方法就被覆蓋方法重寫為子類提供了修改父類成員方法的能力。上一頁下一頁返回4.9知識解析4.9.2隱藏與覆蓋上一頁下一頁返回4.9知識解析4.9.3super
子類在隱藏了父類的成員變量或重寫了父類的方法以后,有時還要用到父類的成員變量或為簡化代碼的編寫在重寫方法中使用父類中的該方法,這時就要訪問父類的成員變量或調用父類的方法Java通過supe:關鍵字來實現對父類成員變量的訪問上一頁下一頁返回4.9知識解析4.9.3super上一頁下一頁4.9知識解析4.9.4抽象類和抽象方法用abstract關鍵字修飾的類稱為抽象類;由abstract關鍵字修飾的類方法稱為抽象方法一個抽象類可含有抽象方法,但抽象方法不能出現在非抽象類中;一個抽象類不一定要有抽象方法,但一個類如果含有抽象方法就一定要聲明為抽象類抽象類本身不具備實際的功能,只能夠用于派生子類,而定義為抽象的方法必須在子類中重寫,即覆蓋原方法也就是說,如果一個類被定義為抽象類,則該類不能進行實例化,必須通過覆蓋的方式來實現抽象類中的方法。上一頁下一頁返回4.9知識解析4.9.4抽象類和抽象方法上一頁下一4.9知識解析4.9.5final修飾符修飾符final既可修飾類,也金額修飾成員變量和成員方法,其用于限制這些被修飾的類、成員變量和成員方法的非繼承性,即是最終的一種形式如果在定義類時加上final修飾符,則說明該類是最終類,不能被其他類繼承,也不能進行實例化,如以下簡單代碼所示:上一頁下一頁返回4.9知識解析4.9.5final修飾符上一頁4.9知識解析4.9.6多態性多態是面向對象中的一個重要特征,是指用相同的名字來定義方法,其中每個方法的參數類型和返回值類型均不相同在Java中,多態性體現在兩個方面:由方法重載實現的靜態多態性和方法覆蓋實現的動態多態性這些內容分別在方法重載和隱藏與覆蓋兩個知識點中講述過了,在此就不再說明了4.9.7初始化的過程構造方法可能進行初始化工作,而類的成員變量本身也能自動進行初始化,那么在對象生成時。
在初始化的過程中,先靜態成員,然后是非靜態成員,再是構造方法若有父類,則父類的相關初始化在子類之前上一頁返回4.9知識解析4.9.6多態性上一頁返回4.10訓練任務4.10.1跟我學完成引導任務4一3的程序設計與調試工作,具體內容見引導任務4一34.10.2自己做①用繼承創建食物類Food,要求繼承Point類,以方便記錄食物的坐標位置,參考程序如下:下一頁返回4.10訓練任務4.10.1跟我學下一頁返回4.10訓練任務上一頁返回4.10訓練任務上一頁返回4.11[引導任務4一4]4.11.1任務要求與目標(I)任務目標能定義并使用接口(2)設計要求該接口能根據不同級另of的消費會員給出不同的折扣4.11.2實施過程①在項目repast中新建包ch04.part4并在該包中新建一個類TestCountInte:為該接口添加如下代碼,最后保存、編譯下一頁返回4.11[引導任務4一4]4.11.1任務要求與4.11[引導任務4一4]②在NetBeans中新建類CountInterImplOne,并為該類添加如下代碼,最后保存、編譯上一頁下一頁返回4.11[引導任務4一4]上一頁下一頁返回4.11[引導任務4一4]③在NetBeans中新建類CountInterImplTw。并為該類添加如下代碼,最后保存、編譯④在NetBeans中新建類CountInterDemo并為該類添加如下代碼,最后保存、編譯上一頁下一頁返回4.11[引導任務4一4]4.11[引導任務4一4]上一頁下一頁返回4.11[引導任務4一4]上一頁下一頁返回4.11[引導任務4一4]
運行結果如圖4一3所示類CountInterImplOne和類CountInterImplTwo分別實現了接口TestCountInter,通過類CountInt-erDemo的對象用接口完成了相關的訪問操作上一頁返回4.11[引導任務4一4]運行結果如圖44.12知識解析4.12.1接口目前,我們已經知道如何通過繼承使類的層次更加清晰以及如何用抽象類將常規操作抽象為繼承結構中的較高級別的類,也知道Java不支持多繼承有時我們希望一個類能包含兩個或更多的父類,但又不希望引進多繼承的復雜性和低效率,于是Java提供了一種特特的類型,那就是接口從任務4-4中,可以得出接口的定義形式為:publicinterface接口名稱更為完整的接口的定義形式為:[public]interface接口名稱「extend父類接口名]{//接口體……}返回4.12知識解析4.12.1接口返回4.13訓練任務4.13.1跟我學完成引導任務4-4的程序設計與調試工作,具體內容見引導任務4-44.13.2自己做①創建貪吃蛇中的墻體接口CroundInter,參考程序如下下一頁返回4.13訓練任務4.13.1跟我學下一頁返回4.13訓練任務②創建墻體類Ground,并實現墻體接口GroundInte:另外,要求增加與貪吃蛇墻體相關的屬性以及這些屬性相對應的設置與獲取值的方法,參考程序如下上一頁下一頁返回4.13訓練任務②創建墻體類Ground,并實現墻體接口G4.13訓練任務上一頁下一頁返回4.13訓練任務上一頁下一頁返回4.13訓練任務上一頁下一頁返回4.13訓練任務上一頁下一頁返回4.13訓練任務上一頁下一頁返回4.13訓練任務上一頁下一頁返回4.13訓練任務上一頁返回4.13訓練任務上一頁返回圖4-1返回圖4-1返回表4-1返回表4-1返回表4-2返回表4-2返回圖4-3返回圖4-3返回單元4設計應用程序的類與接口4.1引導資料階段一:類4.2[引導任務4-1]定義菜品類4.3知識解析4.4訓練任務返回下一頁單元4設計應用程序的類與接口4.1引導資料返回下一頁單元4設計應用程序的類與接口階段二:對象4.5[引導任務4-2]為菜品類添加主方法4.6知識剖析4.7訓練任務上一頁下一頁返回單元4設計應用程序的類與接口階段二:對象上一頁下一頁返回單元4設計應用程序的類與接口階段三:繼承4.8[引導任務4-3]實現餐飲管理系統消費結算功能4.9知識解析4.10訓練任務上一頁下一頁返回單元4設計應用程序的類與接口階段三:繼承上一頁下一頁返回單元4設計應用程序的類與接口階段四:接口4.11[引導任務4-4]自定義一個用于消費結算的接口4.12知識剖析4.13訓練任務上一頁返回單元4設計應用程序的類與接口階段四:接口上一頁返回4.1引導資料4.1.1面向對象的基木概念
(1)對象(Object)
對象由屬性(Attribute)和行為(Action)兩部分組成,是數據和行為的統一體。屬性是用來描述對象靜態特征的一個數據項,行為是用來描述對象動態特征的一個操作。一個對象可以是一個手機或用戶界面的一個窗口,事實上它可以是任何東西每一種對象都有各自的內部狀態和運動規律,不同對象之間的相互聯系和相互作用就構成了各種不同的系統。下一頁返回4.1引導資料4.1.1面向對象的基木概念下一頁返回4.1引導資料(2)類(Class)
共享同一屬性和方法集的所有對象的集合構成類。類是Java語言面向對象編程的基本元索,它定義了一個對象的結構和行為。它為屬于該類的全部對象提供了統一的抽象描述,其內部包括屬性和行為兩個主要部分,簡單的說類是對象集合的再抽象。類與對象的關系如同一個模具與用這個模具鑄造出來的產品之間的關系。類給出了屬于該類的全部對象的抽象定義,而對象則是符合這種定義的一個實體。上一頁下一頁返回4.1引導資料(2)類(Class)上一頁下一頁返回4.1引導資料(3)消息(message)
為了能完成固有的任務,對象需要與其他對象進行互操作,這是連接對象與外部世界的唯一通道。互操作可能發生在同一個類的不同對象之間,或是不同類的對象之間通過發送消息給其他對象,傳遞消息或請求動作,使互操作得到處理例如,當一個用戶按下鼠標,選擇了屏幕上對話框里的一個命令按鈕,一條消息就發給了對話框對象,通知它命令按鈕被按下了。消息可用來改變對象的狀態或請求該對象完成一個動作。上一頁下一頁返回4.1引導資料(3)消息(message)上一頁下一頁返4.1引導資料(4)接口(interface
接口是一個類所具有的方法的特征集合,是一種邏輯上的抽象。接口是消息的通道,通過接口,消息才能傳遞到具體的處理方法中進行處理。接口把方法的特征和方法的實現分割開來。這種分割體現在接口常常代表一個角色,它包括與該角色相關的操作和屬性,而實現這個接口的類便是扮演這個角色的演員。一個角色由不同的演員來演,而不同的演員之間除了扮演一個共同的角色之外并不要求有其他的共同之處。上一頁下一頁返回4.1引導資料(4)接口(interface上一頁下一頁4.1引導資料4.1.2面向對象的特性面向對象技術的基本特征主要有抽象性、封裝性、繼承性和多態性
(1)抽象性抽象(Abstract)是一種機制,就是忽略事物中與當前目標無關的非本質特征,更充分地注意與當前目標有關的本質特征它使得復雜的、真實世界的情況可以通過簡單的模型被表不出來,是真實世界的對象或概念的模型例如,在設計一個學生成績管理系統的過程中,考查學生李三這個對象時,就只關心他的姓名、課程、成績等,而忽略他的出生時間、視力等信息.上一頁下一頁返回4.1引導資料4.1.2面向對象的特性上一頁下一頁返回4.1引導資料(2)封裝性封裝(Encapsulation)就是把對象的屬性和行為結合成一個獨立的單位,并盡可能隱蔽對象的內部細節對相關思想的抽象被封裝在一個單元里,將抽象出來的狀態和行為結合在一個封裝的整體里,這個封裝體稱為類對系統的其他部分來說,狀態和行為的真實內部實現被隱藏起來了在Java中,通過在類定義里面來定義屬性和方法的方式強制實現封裝過程。上一頁下一頁返回4.1引導資料(2)封裝性上一頁下一頁返回4.1引導資料(3)繼承性繼承(Inheritance)是一種聯結類與類的層次模型。繼承性是指特殊類的對象擁有其一般類的屬性和行為,繼承意味著“自動地擁有”,即特殊類中不必重新定義已在一般類中定義過的屬性和行為,而它卻自動地、隱含地擁有其一般類的屬性與行為。繼承允許和鼓勵類的重用,提供了一種明確表述共性的方法一個特殊類既有自己新定義的屬性和行為,又有繼承下來的屬性和行為。盡管繼承下來的屬性和行為是隱式的,但無論在概念上還是在實際效果上,都是這個類的屬性和行為當這個特殊類又被它更下層的特殊類繼承時,它繼承來的和自己定義的屬性和行為又被下一層的特殊類繼承下去因此,繼承是傳遞的,體現了大自然中特殊與一般的關系上一頁下一頁返回4.1引導資料(3)繼承性上一頁下一頁返回4.1引導資料(4)多態性多態性(Polymorphism)是面向對象系統最終表現出來的基本特征。當使用繼承擴展通用的類來得到特殊的類時,通常也會對通用類的一些行為進行擴展。特殊類常常會實現與通用類有些差別的行為,但是行為的名字會保持一樣給定一個對象實例,正確地使用它的行為非常重要,而多態性保證這一點自動并且無縫地實現具體來說,多態性是指類中同一函數名對應多個具有相似功能的不同函數,可以使用相同的調用方式來調用這些具有不同功能的同名函數繼承性和多態性的結合,可以生成一系列雖類似但獨一無二的對象由于繼承性,這些對象共享許多相似的特征;由于多態性,釗對相同的消息,不同對象可以有獨特的表現方式,實現特性化的設計。上一頁返回4.1引導資料(4)多態性上一頁返回4.2[引導任務4一1]定義菜品類4.2.1任務要求與目標
(1)任務目標能定義類
(2)設計要求要能描述菜品的名稱、編號、單價等有關特性,并提供獲取菜的名稱、單價及編號等相關屬性的獲取與設置值的方法下一頁返回4.2[引導任務4一1]定義菜品類4.2.1任務要4.2[引導任務4一1]4.2.2實施過程在NetBeans中打開項目repast,然后在該項目中新建一個包ch04.partl,再在ch04.partl包中新建一個類TestVegtable,并為該類添加如下代碼,最后保存、編譯上一頁下一頁返回4.2[引導任務4一1]4.2.2實施過程上一頁下一頁4.2[引導任務4一1]上一頁下一頁返回4.2[引導任務4一1]上一頁下一頁返回4.2[引導任務4一1]上一頁返回4.2[引導任務4一1]上一頁返回4.3知識解析4.3.1類的聲明在Java程序里,一個類定義了一個對象的結構和它的功能,以將要表達的概念信息抽象封裝在這個類里,封裝好的各種功能稱為成員方法當Java程序運行時,系統用類來創建類的實例,類的實例就是真正的對象類定義的一般形式如下:
「訪問控制修飾]}[abstract][final]<class><類名>[extend父類][implements接口列表]「throws異常類型列表]{
類體[成員變量和成員方法]}下一頁返回4.3知識解析4.3.1類的聲明下一頁返回4.3知識解析4.3.2成員變量類的成員變量表明類的狀態,成員變量也稱為實例變量成員變量的定義格式如下:[訪問控制修飾符][static][final][transients][volatile]<數據類型><成員變量名稱>上一頁下一頁返回4.3知識解析4.3.2成員變量上一頁下一頁返回4.3知識解析4.3.3成員方法
類的方法實現了類所具有的行為,其他對象可以根據類的方法對類進行訪問成員方法的定義格式如下:[訪問控制修飾符][static][final[abstract][native][synchronized}<返回值類型><方法名>(參數表)[throws異常類型][方法體]上一頁下一頁返回4.3知識解析4.3.3成員方法上一頁下一頁返回4.3知識解析4.3.4構造方法構造方法可視為一種特殊的方法,它用于對象被創建時初始化成員變量或對象,它具有和它所在的類名完全一樣的名字構造方法定義后,創建對象時就會自動調用它構造方法沒有返}。!類型,這是因為一個類的構造方法的返回類型就是類本身在以前的大部分程序中均定義了構造方法,這些構造方法沒有定義其該完成什么工作,亦即空的構造方法,格式如下:publicclassName(){}上一頁下一頁返回4.3知識解析4.3.4構造方法上一頁下一頁返回4.3知識解析4.3.5this
在編寫類時,有時需要引用此類的方法或變量,Java通過this來實現此功能this、代表了當前對象的一個引用,可將其看做是對象的另一個名字,通過this可以在任何方法中引用當前的對象。4.3.6方法重載在Java中,同一個類中可以有2個或2個以上的方法用同一個名字,只要它們的參數。聲明或返回值類型不同,該方法就被稱為重載(overloaded),這個過程稱為方法重載(methodoverloading)方法重載是Java實現多態性的一種方式。在引導任務4-1中,有兩個一樣名字的方法TestVegtable,該方法一個帶參數,一個不帶參數,這就是一種方法重載。上一頁下一頁返回4.3知識解析4.3.5this上一頁下一頁返4.3知識解析4.3.7內部類內部類是指在某個類的內部嵌套定義的一個類,內部類可以在一個語句塊的內部定義,也可以是其他類的成員,還可以在一個表達式內部匿名定義其定義格式可表述如下:class外部類{class內部類{}}上一頁返回4.3知識解析4.3.7內部類上一頁返回4.4訓練任務
4.4.1跟我學完成引導任務4一1的程序設計與調試工作,具體內容見引導任務4一1
4.4.2自己做①創建貪吃蛇中的蛇體類為蛇體類添加相關屬性,如蛇的運動方向標識、蛇頭坐標、蛇運行速度等,同時為這些屬性提供相關的設置與獲取值的方法,參考程序見課本P61。②創建連連看圖片數據的模型類為該類添加相應的數據屬性,如游戲級別、總行數總列數、圖片數據等并要求設置這些屬性的獲取與設置值的方法,參考程序見課本P63。返回4.4訓練任務4.4.1跟我學返回4.5[引導任務4-2]為菜品類添加主方法4.5.1任務要求與目標
(1)任務目標能完成類的實例化
(2)設計要求通過TestVegtable。類的對象來獲取某一種菜的名稱、編號、單價并使其能輸出某種菜的名稱、編號、單價4.5.2實施過程①在項目repast中新建包ch04.part2,并在該包中創類建TestVegMain為該類添加如下代碼:下一頁返回4.5[引導任務4-2]為菜品類添加主方法4.5.4.5[引導任務4-2]上一頁下一頁返回4.5[引導任務4-2]上一頁下一頁返回4.5[引導任務4-2]②最后保存、編譯程序,運行結果如圖4一1所示在main方法中創建了一個TestVegtable的對象testVegtable,并通過該對象相應的get方法和set方法完成相關內容的存取上一頁返回4.5[引導任務4-2]上一頁返回4.6知識解析4.6.1對象的創建其實,將類進行實例化就產生了一個對象對象是在程序執行過程中由其所屬的類動態生成的,一個類可以生成多個不同的對象將類實例化就生成對象,并通過消息激活指定的某個類的對象的方法以改變其狀態或產生一定的行為,從而完成某一任務
Java語言中用創建實例對象的操作符new來創建對象,其格式如下:<類名><對象名>=<new><類構造法>下一頁返回4.6知識解析4.6.1對象的創建下一頁返回4.6知識解析4.6.2對象的使用對象必須在實例化之后才能夠使用,這一點與前面所說的變量一樣其實,變量也可看做是一種特殊數據類型的對象當對象實例化之后,就可以用點操作符“.”來完成對類成員變量和成員方法的訪問操作對類成員的訪問一般形式為:<對象名>.<對象所屬類中的可訪問成員>上一頁下一頁返回4.6知識解析4.6.2對象的使用上一頁下一頁返回4.6知識解析4.6.3訪問控制在講述類的成員變量和成員方法時,提到它們都具有相應的訪問控制修飾符Java規定可以選擇4種訪問方式:public,private,protected和、default它們的具體含義如表4一1所示被訪問控制修飾符修飾后的成員變量或方法所具有的訪問權限詳見表4一2(“√”表示可以訪問,“x”表示不可以訪問)上一頁下一頁返回4.6知識解析4.6.3訪問控制上一頁下一頁返回4.6知識解析4.6.4Java的垃圾回收在Java程序的生命周期中,Java運行環境提供了一個系統的垃圾回收器線程,負責自動回收那些沒有引用與之相連對象所占用的內存,這種內存回收的過程就叫垃圾回收垃圾回收機制有如下兩個好處:①它把程序員從復雜的內存追蹤、監測、釋放等工作中解放出來;②它防止了系統內存被非法釋放,從而使系統更加穩定垃圾回收機制具有以下特點:①只有當一個對象不被任何引用類型的變量使用時,它的內存才能被垃圾回收;②不能通過程序強迫垃圾回收立即執行;③當垃圾回收器將要釋放無用對象的內存時,先調用該對象的finalize()方法上一頁下一頁返回4.6知識解析4.6.4Java的垃圾回收上一4.6知識解析4.6.5static
在類的定義中,其成員變量和成員方法如果有static修飾,那么該變量或方法就稱為靜態變量或方法相反沒有static修飾的變量或方法就稱為非靜態變量或方法這種由static修飾的變量或方法不需要實例化就可以使用,是類固有的,可以直接由類引用且只有一個備份,它被所有對象共享其使用格式是:
類名.變量名或方法名上一頁下一頁返回4.6知識解析4.6.5static上一頁下一頁4.6知識解析4.6.6對象的比較在Java中我們可以用兩種方法來比較兩個對象是否相等:一是用“==”運算符;二是用equals方法該兩種方法的用法如下:①如果是基本類型比較,那么只能用==來比較,即比較基本數據類型的值;②如果是對象,則==和equal、比較的都是對象內存中的首地址(即比較引用的對象是否為同一個對象);③對于基本類型的包裝類型,比如Boolean,Character,Byte,Short,Integer,Long,Float,Double等的引用變量,==是比較地址的,而equals是比較內容的上一頁返回4.6知識解析4.6.6對象的比較上一頁返回4.7訓練任務4.7.1跟我學完成引導任務4-2的程序設計與調試工作,具體內容見引導任務4-24.7.2自己做①為貪吃蛇中的蛇體類添加主方法,以測試蛇體的速度、方向、蛇頭顏色、蛇身顏色、蛇體狀態等程序寫法參見引導任務4-2②為連連看數據模型類添加主方法,以測試連連看游戲的開始時間、游戲運行時間、游戲級別等內容程序寫法參見引導任務4-2返回4.7訓練任務4.7.1跟我學返回4.8[引導任務4一3]4.8.1任務要求與目標
(1)任務目標學會使用類的繼承與多態性
(2)設計要求當消費結算時,可不打折直接結算,也可以按會員85折、非會員95折的標準進行結算現要求用繼承來實現多種結算方式下一頁返回4.8[引導任務4一3]4.8.1任務要求與目標下一4.8[引導任務4一3]4.8.2實施過程①在項目repast中新建包ch04.part3,并在該包中新建一個TestExtendsP為該類添加如下代碼,最后保存、編譯上一頁下一頁返回4.8[引導任務4一3]4.8.2實施過程上一頁下一頁4.8[引導任務4一3]②在ch04.part3包中新建一個類TestExtMem,并為該類添加如下代碼,最后保存、編譯上一頁下一頁返回4.8[引導任務4一3]②在ch044.8[引導任務4一3]③在ch04.part3包中新建一個類TestExt,并為該類添加如下代碼,最后保存、編譯上一頁返回4.8[引導任務4一3]③在ch04.part3包中新建4.9知識解析4.9.1繼承繼承是面向對象程序設計的一個重要特征,它是通過繼承原有的類而派生出新的類,被繼承的類稱為父類,派生出的新類為子類,子類繼承父類的成員變量和成員方法,同時還可以修改父類的變量或重寫父類的方法并可以添加新的變量和方法。通過繼承可以實現代碼的復用,使程序組織層次更加清晰同時可以縮短開發周期。在Java語言中,有一個稱為Object的特殊類,所有的類都是直接或間接地繼承Object類。下一頁返回4.9知識解析4.9.1繼承下一頁返回4.9知識解析4.9.2隱藏與覆蓋在任務4一3中,類TestExtendsP,TestExtMem和TestExt中都有方法Total(),且類TPS-tExtMem和TestExt繼承了類TestExtendsP在這種情況下,即在類的繼承中,當子類的成員變量與父類的成員變量同名時,子類的成員變量會隱藏父類的成員變量;當子類的方法與父類的方法同名,參數列表、返lnt值類型相同時,子類的方法將覆蓋父類的方法;當子類重寫的方法由子類的對象調用時,它總是參考子類中的定義,父類中定義的該方法就被覆蓋方法重寫為子類提供了修改父類成員方法的能力。上一頁下一頁返回4.9知識解析4.9.2隱藏與覆蓋上一頁下一頁返回4.9知識解析4.9.3super
子類在隱藏了父類的成員變量或重寫了父類的方法以后,有時還要用到父類的成員變量或為簡化代碼的編寫在重寫方法中使用父類中的該方法,這時就要訪問父類的成員變量或調用父類的方法Java通過supe:關鍵字來實現對父類成員變量的訪問上一頁下一頁返回4.9知識解析4.9.3super上一頁下一頁4.9知識解析4.9.4抽象類和抽象方法用abstract關鍵字修飾的類稱為抽象類;由abstract關鍵字修飾的類方法稱為抽象方法一個抽象類可含有抽象方法,但抽象方法不能出現在非抽象類中;一個抽象類不一定要有抽象方法,但一個類如果含有抽象方法就一定要聲明為抽象類抽象類本身不具備實際的功能,只能夠用于派生子類,而定義為抽象的方法必須在子類中重寫,即覆蓋原方法也就是說,如果一個類被定義為抽象類,則該類不能進行實例化,必須通過覆蓋的方式來實現抽象類中的方法。上一頁下一頁返回4.9知識解析4.9.4抽象類和抽象方法上一頁下一4.9知識解析4.9.5final修飾符
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 用發帶打造出時尚優雅的發型
- 綠色施工對施工企業競爭力的影響
- 幸福的元旦故事時間
- 新春的祝福與希望
- 土木工程項目的BIM項目管理實踐
- 房地產項目戰略規劃方法
- 兒童普通疾病護理常識
- 地漏處防水坡度潑水試驗技術解析
- 保險公司晚宴策劃方案
- 保險公司節日活動方案
- 2024年全國能源行業供熱技能競賽考試題庫大全-中(判斷題)
- 瀝青混凝土路面安全技術交底
- 梨園助手:全年病蟲害防治歷
- JBT 8473-2014 儀表閥組標準規范
- 【編制說明】電力電纜通道用防火隔板及槽盒技術規范
- 分布式光伏經濟評價規范
- 振動力學期末試卷-06.07.08期末-上海交大
- MOOC 大學物理(上)-西北工業大學 中國大學慕課答案
- 伊朗鋼結構包裝專項方案
- 小升初數學知識點總結(小考復習精編專項講義)六年級數學小升初復習系列:數與式知識點梳理大全
- E+H-壓力變送器培訓
評論
0/150
提交評論