面向?qū)ο蟮乃枷敫攀鯻第1頁
面向?qū)ο蟮乃枷敫攀鯻第2頁
面向?qū)ο蟮乃枷敫攀鯻第3頁
面向?qū)ο蟮乃枷敫攀鯻第4頁
面向?qū)ο蟮乃枷敫攀鯻第5頁
已閱讀5頁,還剩53頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第5章面向?qū)ο蟮乃枷敫攀龅?節(jié)面向?qū)ο蟮母拍?.對象(Object)

指現(xiàn)實世界中存在的事物,是構(gòu)成現(xiàn)實世界的一個獨立單元,可以是有形的(如某個人、某種物品等),也可以是無形的(如某項計劃、一次商業(yè)交易等)。

一、面向?qū)ο缶幊讨械幕靖拍顚ο蟮奶卣鞣謨煞N:(1)靜態(tài)特征:指對象的外觀、性質(zhì)、屬性等。靜態(tài)特性抽象為屬性,用數(shù)據(jù)來描述,在Java中表示為類中的成員變量。(2)動態(tài)特征:指對象具有的功能、行為等。

動態(tài)特性抽象為行為,在Java中用一組代碼來表示,稱為成員方法,完成對數(shù)據(jù)的操作。簡言之,一個對象是由一組屬性和一組對屬性進行操作的服務(wù)構(gòu)成。在面向?qū)ο蟮木幊讨?,對象具有三個主要特性:■對象的行為:同一類的對象具有相似的行為?!鰧ο蟮臓顟B(tài):指每個對象存儲的關(guān)于當(dāng)前值及如何達到當(dāng)前值的信息,用變量來承載?!鰧ο蟮臉俗R:每個對象都有一個特殊的標識,即對象的名稱。2.類(class)

指將具有相同屬性及相同行為的一批對象稱為類;廣義地講,把具有共同性質(zhì)的事物的集合稱為類。

在面向?qū)ο蟪绦蛟O(shè)計中,類是一個獨立的程序單位,它有一個類名,其內(nèi)部包括成員變量(用于描述對象的屬性)和成員方法(用于描述對象的行為)。

通過類的實例化對象對引用類的成員變量和成員方法;一個類可以創(chuàng)建多個類對象,它們具有相同的屬性模式,但可以具有不同的屬性值。3.抽象(abstract)

抽象指忽略一個主題中與當(dāng)前目標無關(guān)的那些方面,以便更充分地注意與當(dāng)前目標有關(guān)的方面。即不考慮對象的全部問題,只考慮對象的有用的某些問題。

抽象包括兩個方面:(1)過程抽象:(2)數(shù)據(jù)抽象:4.封裝

封裝是面向?qū)ο蠓椒ǖ囊粋€重要原則,它包含兩個含義:一是指把對象的屬性和行為看成為一個密不可分的整體,將這兩者“封裝”在一個不可分割的獨立單位(即對象)中;另一層含義是指“信息隱蔽”,把不需要讓外界知道的信息隱藏起來,讓訪問者有權(quán)限的進行訪問(通過訪問區(qū)分符來實現(xiàn))。5.繼承

一個類從另一個現(xiàn)有的類中派生,這個過程稱為類繼承;新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。

一個子類只允許繼承一個父類,稱為單繼承;允許從多個父類中繼承,稱為多繼承。在C++中支持多重繼承,而Java中只支持單一繼承,不允許多重繼承;可以通過接口的方式來彌補多重繼承。6.多態(tài)性

多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計的又一個重要特性。多態(tài)性允許程序中出現(xiàn)重名現(xiàn)象,Java語言中具有方法重載與成員覆蓋兩種形式的多態(tài)性?!龇椒ㄖ剌d:在一類中,允許多個方法使用同一個名字,但它們的方法參數(shù)不同,完成的功能不同。■成員覆蓋:子類與父類允許具有相同的變量名稱,但數(shù)據(jù)類型不同,允許具有相同的方法名稱,但完成的功能不同。1.聲明類

使用class關(guān)鍵字聲明類,語法格式如下: class<類名> {

類體; }說明:類體中包括類的屬性(成員變量)和類的方法(成員函數(shù))。二、Java中的類【示例演示】使用class關(guān)鍵字聲明一個Employee類及添加成員數(shù)據(jù)。成員變量(MemberVariable)又稱為屬性(Attribute)或數(shù)據(jù)域(DataField),用來描述類對象的數(shù)據(jù)特征。一個類中可以聲明多個屬性。語法:[成員變量修飾符]<類型><變量表達式列表>說明:(1)成員變量訪問修飾符有private、default、protected和public四種:■private:表示私有的,只能在定義它的類的內(nèi)部被訪問?!鰀efault:表示默認的,可以在定義它的類的內(nèi)部被訪問,也可以被這個包中的其它類訪問。(1)屬性聲明■protected:受保護的,可以在定義它的類的內(nèi)部被訪問,也可以被這個包中的其它類訪問,也可被包外的子類訪問。■public:公共的,可以在定義它的類的內(nèi)部被訪問,也可以被包內(nèi)包外的所有類訪問。小結(jié):開放程度為private<default<protected<public?!臼纠菔尽砍蓡T變量的訪問修飾符public、private、protected的使用。(2)static修飾符用來指明成員要素為靜態(tài)變量,可以通過類名直接訪問,也可以通過實例對象來訪問。(3)final修飾符用于成員變量定義時,指定義為最終變量,即不允許修改的變量,實際上指定義常量。

如:finalfloatPI=3.1415926f;成員方法(MemberMethod)又稱為功能接口(FunctionInterface),簡稱為方法(Method),是類對象與外界的接口,描述了類對象的行為方式,反應(yīng)了對象的行為特征,特別是對屬性進行操作的特征。成員方法對成員變量的操作主要體現(xiàn)在以下兩個方面:(1)改變對象的屬性,一般記為set方法(2)返回對象的屬性,一般記為get方法(2)方法聲明語法格式:[成員方法修飾符]<方法返回值的類型><方法名>([參數(shù)列表]){ //方法體}說明:(1)成員方法修飾符包括private、default、protected和public四種,其作用與成員變量聲明功能一樣。(2)final用于成員方法時,聲明該方法為最終方法,即不允許派生子類去覆蓋的方法。(3)abstract用于聲明成員方法為抽象方法,即沒有實現(xiàn)功能的方法。(4)方法中的參數(shù)稱為形參(形式參數(shù)),每個形參的聲明形式為<類型><形參變量>。無參數(shù)的成員方法:即沒有參數(shù)的成員方法,方法名后面的小括號不可省略。如voidShowTime(){…}有參數(shù)的成員方法:指至少包含一個形參的方法。如floataddNumbers(floata,floatb){…}【示例演示】創(chuàng)建一個圓周類Circle,通過輸入半徑值來計算其周長與面積。【課堂練習(xí)1】定義圖書類Book。Book類包含書名、出版社、作者、定價四個成員變量,一個顯示圖書信息的成員方法?!菊n堂練習(xí)2】定義Student類,其中包括四個私有變量(name、age、sex、score)、一個show()方法。各成員的含義如下:

變量name為字符串類型(String),用于存儲學(xué)生的姓名。

變量age為int類型,用于存儲學(xué)生的年齡。

變量sex為boolean類型,用于存儲學(xué)生的性別,男生為false,女生為true。

變量score為double類型,用于存儲學(xué)生的成績。 show()方法無參數(shù),用于輸出變量name、age、sex和score的值。2.創(chuàng)建類的對象

把類實例化,可以生成多個對象,通過這些類的實例化對象去引用類中的數(shù)據(jù)成員。

對象的生命周期包括三個階段:生成、使用和清除。(1)創(chuàng)建類的實例對象的生成包括類聲明、實例化和初始化三個方面。實例化類對象的格式如下:<類名><對象名>=new<類名>([參數(shù)列表]);說明:new用來給類對象分配內(nèi)存空間。如:Employeeemp=newEmployee();(2)使用實例化對象

對象的使用包括引用對象的成員變量和成員方法,通過運算符“.”可以實現(xiàn)對對象的變量的訪問和方法的調(diào)用?!臼纠菔尽客ㄟ^類對象訪問類的成員數(shù)據(jù)。【課堂練習(xí)1】使用圖書類Book。輸出中國古代四大名著中《西游記》的相關(guān)信息:書名:

《西游記》出版社:北京大學(xué)出版社作者:吳承恩定價:58.00元【課堂練習(xí)2】定義Student類的實例化對象,輸出劉明同學(xué)的相關(guān)信息:Name:劉明Age:18Sex:男Score:98.0(3)this關(guān)鍵字的含義this是一種特殊的引用,它指向?qū)ο笞陨恚硎緦ψ陨韺ο蟮囊粋€引用。通過this這一引用,能夠訪問對象自身的成員數(shù)據(jù),調(diào)用對象自身的成員方法??梢詫his作為對象特殊的引用變量的名稱,該變量可被訪對象自身使用。this關(guān)鍵字主要用于類的非靜態(tài)成員方法(即實例方法)與構(gòu)造方法中,而在靜態(tài)方法(即類方法)中是不允許使用this關(guān)鍵字的。(4)this關(guān)鍵字的用途 this關(guān)鍵字主要有以下幾種用途:構(gòu)造方法中通過this引用同類的其他重載構(gòu)造方法,即通過this調(diào)用另一個構(gòu)造方法,格式:this(參數(shù)列表);。在非靜態(tài)成員方法中,通過this訪問當(dāng)前對象的成員變量或成員方法。在構(gòu)造方法中或非靜態(tài)成員方法中,參數(shù)名或方法內(nèi)的局部變量名與類的屬性同名,為區(qū)分開來,需要在類的屬性名前加上this.前綴。

即函數(shù)參數(shù)或者函數(shù)中的局部變量和成員變量同名的情況下,成員變量被屏蔽,此時要訪問成員變量則需要用“this.成員變量名”的方式來引用成員變量。在非靜態(tài)成員方法的參數(shù)中,包含有對當(dāng)前對象引用的對象類型參數(shù),此時需用this來傳遞這類參數(shù)?!臼纠菔尽縯his的用法?!菊n堂練習(xí)】this的用法。構(gòu)造方法(Constructor)又稱為構(gòu)造器,習(xí)慣上稱之為構(gòu)造函數(shù)。構(gòu)造方法是類用來創(chuàng)建對象、初始化類的屬性的一種特殊方法,它本身不屬于類的成員方法。Java中所有的類至少都要有一個構(gòu)造方法,即使用戶不明確地定義,系統(tǒng)也會為該類生成一個默認構(gòu)造方法或缺省構(gòu)造方法,這種缺省構(gòu)造方法沒有任何參數(shù),且方法體為空。3、類的構(gòu)造函數(shù)構(gòu)造函數(shù)(方法)具有以下特點:(1)構(gòu)造方法的方法名與類名完全相同(包括字母大小寫)(2)構(gòu)造方法沒有返回類型,也不允許返回void類型。(3)構(gòu)造方法不允許用戶直接調(diào)用,只能通過new關(guān)鍵字在創(chuàng)建對象時由系統(tǒng)調(diào)用。構(gòu)造函數(shù)一般定義為public類型。(4)一個類可以包含多個重載的構(gòu)造方法,使用這些重載的構(gòu)造方法創(chuàng)建不同對象時,通過參數(shù)的不同來決定調(diào)用哪個構(gòu)造方法。(5)構(gòu)造方法可以繼承,即子類能夠繼承父類的構(gòu)造方法(6)構(gòu)造方法中可以使用super與this兩個關(guān)鍵字來引用直接父類或自身對象?!臼纠菔尽渴褂胏lass關(guān)鍵字聲明一個Employee類及添加成員數(shù)據(jù)和兩個構(gòu)造方法(一個無參,一個帶參)。【示例演示】定義一個立方體類Cube,該類具有長、寬、高三種屬性,并聲明重載的構(gòu)造函數(shù)分別給長、寬、高賦值,并聲明一個顯示輸出該立方體對象的體積的方法。【課堂練習(xí)】定義圖書類Book與主類BookExam。Book類包含書名、出版社、作者、定價四個成員變量,兩個構(gòu)造函數(shù),一個顯示圖書信息的成員方法。主類的功能為生成兩本書的實例對象,然后分別顯示出這兩本書的基本信息?!菊n后練習(xí)】定義Student類,其中包括四個私有變量(name、age、sex、score)、一個構(gòu)造函數(shù)和一個show()方法。各成員的含義如下:

變量name為字符串類型(String),用于存儲學(xué)生的姓名。

變量age為int類型,用于存儲學(xué)生的年齡。

變量sex為boolean類型,用于存儲學(xué)生的性別,男生為false,女生為true。

變量score為double類型,用于存儲學(xué)生的成績。

構(gòu)造函數(shù)包括四個參數(shù),用于為變量name、age、sex和score賦值。 show()方法無參數(shù),用于輸出變量name、age、sex和score的值。1、類的繼承中的概念一個新類可以從現(xiàn)有的類中派生,派生出的類稱為已有類的子類或派生類,已有類稱為基類、超類或父類。一個基類可以同時擁有多個子類,這個基類是所有子類的公共屬性和公共方法的集合;而每一個子類則是基類的特殊化,是對基類功能的擴展和延伸。三、類的繼承繼承存在兩種形式:單重繼承與多重繼承。(1)單重繼承:又稱為單一繼承,是指任何一個子類最多只能有一個直接父類(但它可以有多個間接父類)。(2)多重繼承:指一個子類可以有一個以上的直接父類,該類從所有這些父類中同時繼承父類的屬性、行為與方法。

說明:Java屬于單一繼承,要實現(xiàn)多重繼承,需要引入接口機制。繼承的意義(1)繼承很好地解決了軟件復(fù)用。通過繼承,一個類可以擁有已有類的所有功能。因此,只需指明新類與現(xiàn)有類的不同,即增加自己的屬性和方法即可,從而有效地減少了代碼和數(shù)據(jù)的冗余度,增強了程序的可重用性。假定B類繼承了A類(即A類是B類的基類),建立B類時只需增加與A類不同的特征(成員數(shù)據(jù)和成員方法)的描述,不需再重新定義A類已有的特征。(2)采用繼承機制可以有效地組織程序結(jié)構(gòu),充分利用已有類來創(chuàng)建更加復(fù)雜的類,具有以下優(yōu)點:◆大大提高了程序開發(fā)的效率◆降低了代碼編寫的冗余度◆降低系統(tǒng)的復(fù)雜度與維護工作量◆提升代碼的復(fù)用率繼承的特征(1)繼承關(guān)系是傳遞的

(2)繼承簡化了人們對事物的認識和描述,能清晰體現(xiàn)相關(guān)類之間的層次結(jié)構(gòu)關(guān)系

(3)通過增強一致性來減少模塊的接口和界面,大大增加程序的易維護性

(4)Java不支持類的多重繼承,只支持類的單一繼承2、繼承的實現(xiàn)(1)使用extends關(guān)鍵字實現(xiàn)類的繼承Java程序中,繼承通過extends關(guān)鍵字來實現(xiàn)。子類對父類的繼承是在類的聲明中通過關(guān)鍵字extends來指明。實現(xiàn)繼承的語法結(jié)構(gòu)為:[修飾符]class<子類類名>extends<父類類名>{……//類體定義}說明:(1)關(guān)鍵字extends指定聲明的子類需要繼承父類的某些屬性和方法;如果定義類時沒有給出extends關(guān)鍵字及類名,表示聲明的類自動繼承java.lang.Object類;Object類是Java定義的抽象類,該類定義了所有對象都具有的相同行為方法;Java中所有類都默認是從Object系統(tǒng)類派生而來。(2)extends關(guān)鍵字在新定義類與父類之間建立了繼承關(guān)系;子類可以從父類繼承所有非private成員要素。(3)基類中的私有屬性不能被子類繼承;但子類可以通過繼承基類的公有方法來間接地存取基類的私有屬性。(4)繼承不能改變基類屬性與方法的訪問權(quán)限?!臼纠菔尽款惖睦^承應(yīng)用。(2)類繼承的傳遞性:類的繼承具有傳遞性?!臼纠菔尽款惖睦^承具有傳遞性。(3)派生類的初始化

創(chuàng)建派生類對象時,使用派生類的重載構(gòu)造函數(shù)對其初始化,不但要對自身的成員變量賦初值,還要對繼承的父類的成員變量賦初值。為了區(qū)分基類和子類的構(gòu)造函數(shù),用this表示當(dāng)前類的構(gòu)造函數(shù),用super表示父類的構(gòu)造函數(shù)。【示例演示】this和super關(guān)鍵的含義與使用。(4)類對象之間的數(shù)據(jù)類型轉(zhuǎn)換

類是一種抽象的數(shù)據(jù)類型,與基本數(shù)據(jù)類型的數(shù)據(jù)一樣,類的實例化對象之間可以相應(yīng)進行類型轉(zhuǎn)換,同樣也分為隱式自動類型轉(zhuǎn)換和顯示強制類型轉(zhuǎn)換。轉(zhuǎn)換格式與基本數(shù)據(jù)類型變量的轉(zhuǎn)換一樣:

類對象=(類名)類對象 Java語言中允許父類和子類的對象之間進行類型轉(zhuǎn)換。子類對象轉(zhuǎn)換為父類對象時,可以是顯式也可以是隱式的,子類對象能直接向父類對象賦值;父類對象向子類對象賦值時,必須要強制類型轉(zhuǎn)換?!臼纠菔尽款悓ο笾g的數(shù)據(jù)類型轉(zhuǎn)換。(5)類的成員覆蓋

指在類的繼承中,子類新增的成員變量與成員方法的名稱與父類的數(shù)據(jù)成員名稱相同。成員變量的覆蓋表明子類與父類的變量名稱相同;成員方法的覆蓋表明子類的方法名稱與父類的相同,且參數(shù)相同,但兩者的功能不同。

出現(xiàn)成員覆蓋后,子類成員覆蓋了父類成員。在子類中,通過名稱僅能訪問本身的成員(子類的成員),要訪問父類的成員,必須使用關(guān)鍵字super作為前綴,并使用圓點運算符。【示例演示】類的成員覆蓋。5.this和super關(guān)鍵字的使用(1)this的含義:■this可以表示當(dāng)前類的一個實例化對象,通過this可以引用當(dāng)前類中的數(shù)據(jù)成員(成員變量和成員函數(shù))。如:this.iAge=20//給當(dāng)前類的成員變量賦值■this還可表示當(dāng)前類的構(gòu)造函數(shù),如this(10,20)。【示例演示】this關(guān)鍵字的使用。(2)super關(guān)鍵字的含義 Java中,this用來引用當(dāng)前對象,與this類似,super用來引用當(dāng)前對象的父類;通過super來實現(xiàn)對父類成員的訪問。 Super的使用有三種情況:■用來訪問父類被隱藏的成員變量。【示例演示】用super代替父類對象來引用父類的成員變量?!鲇脕碚{(diào)用父類中被重載的方法。如:super.method([參數(shù)列表])■用來調(diào)用父類的構(gòu)造函數(shù)。如:super([參數(shù)列表])6.static

溫馨提示

  • 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

提交評論