




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
人民郵電出版社5類和對象Java程序設計第章導讀Introduction面向對象技術有三個特征,分別是數(shù)據封裝(類)、繼承和多態(tài)。本章先講解面向對象的基本概念,然后主要講解與類和對象有關的內容。C目錄ONTENTS5.2類5.3對象5.6參數(shù)的傳遞5.1面向對象的基本概念5.4訪問權限5.5構造方法5.7對象組合5.8package和import5.9對象數(shù)組5.10static與static修飾成員5.11其它類型的類5.12小結5.1.1
對象的概念客觀世界中的任何事物都是對象,不管是有生命的還是無生命的、具體的還是抽象的都可以看作對象。01OPTION02OPTION03OPTION04OPTION面向對象就是從對象的角度觀察、了解、認識世界。每一個對象都有兩個特征,一個是屬性,一個是行為。有些對象的行為比較明顯,有些對象的行為則不太明顯。5.1.2
類的概念類是對同一類對象的屬性和行為的封裝。抽象就是忽略事物中與當前目標無關的非本質特征,把具有共性和行為的事物劃為一類,得到一個抽象的結果。抽象應該根據問題的需要而抽象,同一類對象在不同領域抽象的結果有所不同。如學籍管理系統(tǒng)和學生健康管理系統(tǒng)中,對學生的抽象結果不同。抽象之后應該進行封裝(Encapsulation),就是把對象的屬性和行為結合成相對一個獨立的單位,并盡可能隱蔽對象的內部細節(jié)。不能過分地強調封裝。如果過分地強調封裝,則對象和外界的信息交流將會變得非常困難。5.1.3繼承繼承是在已有類基礎上生成新類的過程。已有類是一般類,新類是特殊類。通過繼承,特殊類擁有一般類的屬性和行為,還可以有自己新定義的屬性和行為。繼承又可以稱為派生,即一般類派生出特殊類。一般類又可以稱為派生類或子類,特殊類又可以稱為基類或父類。繼承能反映出客觀世界中事物之間的層次關系。繼承具有傳遞性。繼承可分為多重繼承與單重繼承。交通工具汽車飛機輪船客車貨車客輪游輪貨輪Base1Base2Base3Derived5.1.3繼承5.1.4多態(tài)所謂多態(tài),就是同一類對象表現(xiàn)出的不同行為。多態(tài)性強調的是同一類對象的不同行為。在面向對象技術中,可以用父類對象表示子類對象。具體實現(xiàn)時,用父類的對象表示子類對象,通過父類對象表示對象行為時,運行時系統(tǒng)能夠判定父類對象表示的是自身對象還是哪一個子類的對象,從而能準確地使對象所在類中的行為表現(xiàn)出來,實現(xiàn)多態(tài)性。C目錄ONTENTS5.2類5.3對象5.6參數(shù)的傳遞5.1面向對象的基本概念5.4訪問權限5.5構造方法5.7對象組合5.8package和import5.9對象數(shù)組5.10static與static修飾成員5.11其它類型的類5.12小結5.2.1
類的定義類的定義形式如下:面向對象技術是從對象的角度觀察和認識世界,但是對象屬于類,所以必須先定義類,再由類生成對象。class類名{
域的定義;
方法的定義;}5.2.2域定義域是對象的屬性,也是對象中的數(shù)據。域的定義形式如下:域數(shù)據類型域1[=初值1],域2[=初值2],……;類中定義的每個域都有默認的初值。定義類時應該根據問題需要先抽象出對象的域。【問題1】平面上有若干個圓,現(xiàn)在想計算出每個圓的面積和周長,該如何處理?只需要抽象出一個半徑radius作為類的域即可:doubleradius;5.2.2域定義【問題2】平面上有若干個圓,現(xiàn)在想計算出每個圓的面積和周長,每個圓都有確定的位置,并可以對圓進行平行移動,該如何處理?應該抽象出三個域:intx,y;doubleradius;5.2.3方法方法是對象的行為,在程序中是對對象的域進行處理的工具。方法定義形式如下:方法類型方法名([形式參數(shù)]){//……}1.方法的定義方法返回值:return表達式;對于5.2.2中的問題1,因為要計算面積和周長,所以需要定義一個計算面積的方法和一個計算周長的方法:doublearea();doubleperimeter();對于5.2.2中的問題2,因為要進行平移,所以還需要定義一個方法對圓進行移動:voidmove(intoffX,intoffY);5.2.3方法1.方法的定義方法的使用習慣上稱為方法的調用。01OPTION02OPTION03OPTION調用其它方法的方法稱主調方法,被其它方法調用的方法稱為被調方法。定義方法時所寫的參數(shù)稱為形式參數(shù),調用方法時所寫的參數(shù)稱為實際參數(shù)。5.2.3方法2.方法的使用5.2.3方法3.方法的遞歸調用一般地,一個方法調用了另外一個方法,而這個被調用的方法又調用了其它方法,其它方法還可以再調用其它方法,這種調用過程稱方法的嵌套調用。如果一個方法直接或間接地調用了自身,這種調用稱為遞歸調用。5.2.3方法3.方法的遞歸調用通過遞歸調用,可以將問題簡化為規(guī)模縮小了的同類問題的子問題。使用方法遞歸調用時,應滿足三個要求:(1)每一次的調用都會使問題得到簡化;(2)前后調用應該有一定的關系,通常是前一次調用要為后一次調
用準備好條件(數(shù)據);(3)是在問題規(guī)模極小時應該終止遞歸調用5.2.3方法3.方法的遞歸調用【例5.1】計算n!。Example5_01.java5.2.3方法3.方法的遞歸調用【例5.2】用遞歸方法找出Fibonacci(斐波那契)數(shù)列的第20個元素。Example5_02.java方法重載是指在同一作用域內,可以有一組具有相同方法名、不同參數(shù)表的方法,這組方法被稱為重載方法。intadd(inta,intb){//……}doubleadd(doublea,doubleb){//…….}intadd(inta,intb,intc){//……}重載方法通常用來命名一組功能相似的方法。下面的方法定義在同一類中:5.2.3方法4.方法的重載5.2.3方法4.方法的重載【例5.3】編程序計算兩個同類型的數(shù)之和。Example5_03.java【例5.4】找出兩個整型數(shù)、三個整型數(shù)或四個整型數(shù)中的最大數(shù)。Example5_04.javaC目錄ONTENTS5.2類5.3對象5.6參數(shù)的傳遞5.1面向對象的基本概念5.4訪問權限5.5構造方法5.7對象組合5.8package和import5.9對象數(shù)組5.10static與static修飾成員5.11其它類型的類5.12小結定義了一個類相當于定義了一個新的數(shù)據類型,程序不能處理類,程序處理的是類的對象,因此必須定義對象。由類所定義的變量就是對象。對象雖然是變量,但是對象型的變量不同于簡單變量(如:inta;),對象中除了有數(shù)據外,對象本身還有行為。5.3.1Java中對象的概念5.3.2對象的創(chuàng)建與表示(1)聲明對象名類名對象名;例如:CirclemyCircle;(2)創(chuàng)建對象使用new運算符后跟構造方法就可以創(chuàng)建對象:new構造方法([實際參數(shù)])如:newCircle()(3)表示對象對象名=new構造方法();例如:myCricle=newCircle();或:CirclemyCircle=newCircle();一般地,對象的創(chuàng)建通過三個步驟。5.3.3對象的內存模型myCircle=newCircle()賦值表達式:5.3.4對象的使用對象名.域名創(chuàng)建對象后就可以通過對象使用對象了。使用對象中的域:使用對象中的方法:對象名.方法名([實際參數(shù)表列])【例5.5】對5.2.2中的問題1,計算半徑分別為10和15的兩個圓的面積和周長。
Example5_05.java5.3.5this關鍵字【例5.6】對5.2.2中的問題2,定義圓類計算圓的面積和周長,并能表示圓的位置和移動圓。Example5_6.javathis是對象名,是對象的別名,又稱對象的引用。this的作用范圍在方法中。當通過一個對象調用一個方法時,運行時系統(tǒng)會將當前對象傳遞到方法中,在方法中就可以通過this訪問這個對象。C目錄ONTENTS5.2類5.3對象5.6參數(shù)的傳遞5.1面向對象的基本概念5.4訪問權限5.5構造方法5.7對象組合5.8package和import5.9對象數(shù)組5.10static與static修飾成員5.11其它類型的類5.12小結5.4.1訪問權限的概念封裝時要對域或方法起到適當?shù)谋Wo作用。對數(shù)據或方法的保護可以通過設定訪問權限來實現(xiàn)。訪問權限是指對對象中成員訪問的限制。Java中有三個訪問限定詞,分別是private(私有的)、protected(保護的)和public(公有的)。如果沒有訪問限定詞,則該域或方法的訪問權限是默認的或友好的。訪問權限只是在類體之外對域或方法訪問的限制,在類的內部,任何一個方法都可以直接訪問其它的域或方法,沒有限制。5.4.2私有域和私有方法在域或方法前加關鍵字private,表示域或方法的訪問權限是私有的。定義形式:private數(shù)據類型域;private方法類型方法名([參數(shù)]){//方法體}私有的域或方法只能被其所在類的方法訪問或調用,在類體之外不能通過對象名直接訪問。私有域或方法具有最高的保護權限。5.4.3公有域和公有方法在域或方法前加關鍵字public,表示域或方法的訪問權限是公有的。定義形式:public數(shù)據類型域;public方法類型方法名([參數(shù)]){//方法體}公有成員在程序的任何地方都可以被訪問。main()的訪問權限都是public,表示在任何地方都可以運行這個程序。通過公有的域或方法,可以使對象與其它對象進行信息交換,公有的方法可以看作是對象與外界的接口。5.4.4保護的域和保護的方法在域或方法前加關鍵字protected,表示域或方法的訪問權限是保護的。定義形式:protected數(shù)據類型域;protected方法類型方法名([參數(shù)]){//方法體}保護的成員可以被所在類的其它方法訪問;被子類繼承后,可以被子類中的其它方法直接訪問;在同一個包中,可以通過對象名直接訪問;不是同一包中的非子類,不能通過對象名直接訪問。5.4.5默認訪問權限的域和方法如果在定義域或方法時,在域或方法前不加任何訪問限定詞,則域或方法的訪問權限是默認的。默認的域或方法具有包的訪問權限,利用包的訪問權限,可以提高訪問的靈活性。5.4.5默認訪問權限的域和方法
同一個類同一個包不同包的子類不同包的非子類private√
默認的√√
protected√√√
public√√√√表5.1
訪問權限的作用范圍【例5.7】將例5.6中Circle類的域定義為private、方法定義為public。Example5_07.java5.4.6public類關鍵字public還可以修飾類,使類成為公共類。公共類可以被任何其它包中的類訪問,公共類中的公有成員也可以被任何其它包中的類訪問。一個Java源程序文件中可以定義多個類,但是最多只能有一個類是public類。一般地,main()方法應該定義在public類中。C目錄ONTENTS5.2類5.3對象5.6參數(shù)的傳遞5.1面向對象的基本概念5.4訪問權限5.5構造方法5.7對象組合5.8package和import5.9對象數(shù)組5.10static與static修飾成員5.11其它類型的類5.12小結5.5.1構造方法的作用構造方法用于創(chuàng)建對象。構造方法的作用就在于創(chuàng)建對象。當對象創(chuàng)建時,構造方法就會被調用,所以可以利用構造方法對對象中的域進行初始化。5.5.2實例初始化器可以在類中定義實例初始化器,利用實例初始化器對域進行初始化。實例初始化器也是一個方法,但它只有方法體,沒有方法頭部。實例初始化器的定義形式:{//實例初始化器方法體//……}每一次調用構造方法創(chuàng)建對象時,都要先調用實例初始化器,然后才能調用相應的構造方法。一個類中最多只能定義一個實例初始化器。5.5.3構造方法的定義與使用構造方法沒有類型,沒有返回值,方法名與所在類的類名相同,參數(shù)與方法體與一般的方法定義一樣,可以重載,多數(shù)情況下訪問權限定義為public,以便在類外可以創(chuàng)建該類的對象。構造方法定義形式:方法名([形式參數(shù)表列]){//構造方法的方法體}其中的“方法名”與所在類的類名相同。【例5.8】重寫例5.7中的Circle類,在類中定義必要的構造方法。Example5_08.javaC目錄ONTENTS5.2類5.3對象5.6參數(shù)的傳遞5.1面向對象的基本概念5.4訪問權限5.5構造方法5.7對象組合5.8package和import5.9對象數(shù)組5.10static與static修飾成員5.11其它類型的類5.12小結5.6.1基本類型數(shù)據作方法的參數(shù)方法中的參數(shù)是基本數(shù)據類型。當方法被調用時,將實際參數(shù)的值存入形式參數(shù)的內存空間。實際參數(shù)(變量)與方法參數(shù)分別占用不同的內存空間,所以,當方法參數(shù)的值發(fā)生改變,并不影響實際參數(shù)的值。定義方法時,如果方法有參數(shù),則調用方法時必須向被調用方法傳遞數(shù)據。參數(shù)傳遞分為基本類型的參數(shù)和非基本類型的參數(shù)。數(shù)組和對象類型的參數(shù)屬于非基本類型。【例5.9】定義一個方法改變平面上一個點的位置。Example5_09.java5.6.2引用類型作方法的參數(shù)引用類型作方法的參數(shù)可分為數(shù)組類型的數(shù)據與對象類型的數(shù)據。【例5.10】定義一個方法改變平面上若干個點的位置。Example5_10.java1.數(shù)組類型的數(shù)據作方法的參數(shù)當用數(shù)組名作方法的參數(shù)時,是將數(shù)組的引用傳遞給被調用方法。當被調方法接收到數(shù)組的引用后,它所訪問的數(shù)組與主調方法中的數(shù)組是同一個數(shù)組。【例5.11】定義一個點類描述平面上的點,定義一個方法可以改變點的位置。Example5_11.java2.對象作方法的參數(shù)
當用對象名作方法的參數(shù)時,是將對象的引用傳遞給被調用方法。當被調方法接收到對象的引用后,它所訪問的對象與主調方法中的對象是同一個對象。C目錄ONTENTS5.2類5.3對象5.6參數(shù)的傳遞5.1面向對象的基本概念5.4訪問權限5.5構造方法5.7對象組合5.8package和import5.9對象數(shù)組5.10static與static修飾成員5.11其它類型的類5.12小結5.7.1對象組合的概念如果一個對象中的域是其它類的對象,則稱這個對象是組合對象,組合對象所在類稱為組合類。編寫程序時,盡可能將一個較復雜的對象分解成若干個容易表示的對象,每個對象所對應的類都是較為簡單的類,以便于問題的解決。5.7.2組合類的定義與使用在使用組合對象時,需要初始化組合類中的對象域。【例5.12】改寫例5.7,定義一個點類,將圓的圓心用點類的對象表示,仍然能計算圓的面積和周長,并能對圓進行移動。Example5_12.javaC目錄ONTENTS5.2類5.3對象5.6參數(shù)的傳遞5.1面向對象的基本概念5.4訪問權限5.5構造方法5.7對象組合5.8package和import5.9對象數(shù)組5.10static與static修飾成員5.11其它類型的類5.12小結5.8.1package語句在實際軟件開發(fā)過程中,可以將功能相近或相關的類放在一個包中,其它的功能相近或相關的類再放到其它包中。一個Java程序中可以定義若干個包,每個包中包含類,還可以再包含包(子包)。采用包管理類還可以避免重名問題。package語句和import語句都是與包和類操作有關的語句,使用package和import語句可以合理、有效地管理和使用類。
5.8.1package語句package語句的使用形式:1.定義包package包名[.子包名1[.子包名2[…]]];如果想使用某一個包中的類,需要在類的前面加上包名,表示是這個包中的類。使用方法:包名[.子包名1[.子包名2[…]]].類名對象名;2.使用包中的類5.8.1package語句【例5.13】定義日期類和學生,并將其放到包myClasses中。寫一個應用程序使用myClasses包中的類。Example5_13.java5.8.2import語句import語句用于導入已定義的類。import語句用法:import[包名[.子包名1[.子包名2[….子包n]]].*;import[包名[.子包名1[.子包名2[….子包n]]].類名;【例5.14】改寫例5.13,使用系統(tǒng)的日期類Date的對象表示日期,在主程序中用import語句將學生類引入進來,并生成學生類的對象。Example5_14.javaC目錄ONTENTS5.2類5.3對象5.6參數(shù)的傳遞5.1面向對象的基本概念5.4訪問權限5.5構造方法5.7對象組合5.8package和import5.9對象數(shù)組5.10static與static修飾成員5.11其它類型的類5.12小結5.9.1
對象數(shù)組的概念如果一個數(shù)組中的元素是對象類型,則稱該數(shù)組為對象數(shù)組。5.9.2
對象數(shù)組的定義與使用對象數(shù)組的定義與一般的數(shù)組定義類似,對象數(shù)組的聲明形式:類名對象數(shù)組名[];為對象數(shù)組分配內存空間:對象數(shù)組名=new類名[數(shù)組長度];5.9.2對象數(shù)組的定義與使用還必須為每一個元素實例化。比如如下的過程:Studentstu[]=newStudent[30];for(inti=0;i<stu.length;i++)stu[i]=newStudent();5.9.2對象數(shù)組實例【例5.15】設計一個雇員類,并創(chuàng)建雇員類的對象數(shù)組,輸出每個雇員的信息。
Example5_15.java對象數(shù)組還可以采用初始化的方法創(chuàng)建。創(chuàng)建形式:【例5.16】設計一個雇員類,創(chuàng)建雇員類的對象數(shù)組并初始化,輸出每個雇員的信息。
Example5_16.java類名對象數(shù)組名[]={對象表列};C目錄ONTENTS5.2類5.3對象5.6參數(shù)的傳遞5.1面向對象的基本概念5.4訪問權限5.5構造方法5.7對象組合5.8package和import5.9對象數(shù)組5.10static與static修飾成員5.11其它類型的類5.12小結
5.10.1static修飾域一個類的所有對象有相同的屬性或行為,就可以用關鍵字static修飾類的域或方法。使用static還可以定義靜態(tài)初始化器。關鍵字static修飾類的域,修飾域的形式如下:[訪問限定詞]static數(shù)據類型域名[=初值];用static修飾的域稱類域或靜態(tài)域。靜態(tài)域可以通過對象名或方法訪問,訪問形式:類名.靜態(tài)域名【例5.17】設計一個雇員類,創(chuàng)建雇員類的對象,統(tǒng)計雇員的出勤情況。Example5_17.java5.10.2static修飾方法關鍵字static還可以修飾方法,它所修飾的方法稱為類方法或靜態(tài)方法。定義類方法形式:static方法類型方法([形式參數(shù)表列]){//方法體}靜態(tài)方法一般用于訪問靜態(tài)域。通過對象名和類名調用靜態(tài)方法。通過類名調用靜態(tài)方法的形式:類名.方法名([實際參數(shù)表列])【例5.18】改寫例5.17,在類中定義靜態(tài)方法用于訪問靜態(tài)域。Example5_18.java5.10.3靜態(tài)初始化器靜態(tài)初始化器也是一個方法,但是它無方法名。靜態(tài)初始化器定義形式:static{//靜態(tài)域初始化語句}當靜態(tài)初始化器所在的類第1次被使用時,靜態(tài)初始化器首先被調用。【例5.19】改寫例5.18,在類中定義靜態(tài)初始化器用于對靜態(tài)進行初始化。
Example5_19.javaC目錄ONTENTS5.2類5.3對象5.6參數(shù)的傳遞5.1面向對象的基本概念5.4訪問權限5.5構造方法5.7對象組合5.8package和import5.9對象數(shù)組5.10static與static修飾成員5.11其它類型的類5.12小結5.11.1內部類在有些情況下,需要將類定義在一個比較小的范圍內,這個類的使用只限于這個小范圍,就可以將類定義成內部類或匿名類。如果一個類定義在另外一個類的內部,這個類就稱為內部類。包含內部類的類稱
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 跨區(qū)域合作下的喀什旅游業(yè)發(fā)展策略
- 文化交流中介服務協(xié)議
- 項目勞務合同范本
- 貨車租賃的市場導向
- 一年級小學生讀書心得體會
- 《社戲》課后教學反思
- 量子材料的磁性與相變研究-洞察闡釋
- 市場營銷專業(yè)心得體會
- 售后質量保障協(xié)議
- 三年級數(shù)學計算題專項練習匯編及答案集錦
- 建筑施工安全技術統(tǒng)一規(guī)范
- 甲酸鈣生產工藝
- 建設工程施工安全技術操作規(guī)程完整
- 送醫(yī)護人員錦旗用語16字
- 裝配作業(yè)指導書
- 法律診所完整版教學ppt課件全套教程
- 四年級奧數(shù)舉一反三用假設法解題PPT學習教案
- 學校內控制度及手冊
- 新人教版九年級物理全冊習題
- 修改版鳥兒之最 PPT
- 華為MA5608T配置指導
評論
0/150
提交評論