面向?qū)ο蟪绦蛟O(shè)計(jì)演示文稿_第1頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)演示文稿_第2頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)演示文稿_第3頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)演示文稿_第4頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)演示文稿_第5頁(yè)
已閱讀5頁(yè),還剩88頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

面向?qū)ο蟪绦蛟O(shè)計(jì)演示文稿第一頁(yè),共九十三頁(yè)。面向?qū)ο蟪绦蛟O(shè)計(jì)第二頁(yè),共九十三頁(yè)。程序設(shè)計(jì)方法公共數(shù)據(jù)函數(shù)函數(shù)函數(shù)函數(shù)算法+數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)方法方法數(shù)據(jù)方法方法過(guò)程式程序設(shè)計(jì)OOP程序設(shè)計(jì)對(duì)象+消息消息第三頁(yè),共九十三頁(yè)。程序設(shè)計(jì)方法面向過(guò)程的程序設(shè)計(jì)面向過(guò)程的程序遵循面向過(guò)程的問(wèn)題求解方法其中心思想是用計(jì)算機(jī)能夠理解的邏輯來(lái)描述和表達(dá)待解決的問(wèn)題及其具體的解決過(guò)程。算法+數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)利用計(jì)算機(jī)的離散邏輯來(lái)量化表達(dá)需要解決的問(wèn)題。而算法則研究如何快捷、高效地組織解決問(wèn)題的具體過(guò)程。面向過(guò)程——面向機(jī)器第四頁(yè),共九十三頁(yè)。程序設(shè)計(jì)方法面向?qū)ο蟮某绦蛟O(shè)計(jì)它能夠用計(jì)算機(jī)邏輯來(lái)模擬、描述系統(tǒng)本身,包括系統(tǒng)的組成,系統(tǒng)的各種可能狀態(tài),以及系統(tǒng)中可能產(chǎn)生的各種過(guò)程與過(guò)程引起的系統(tǒng)狀態(tài)切換。面向?qū)ο蟮某绦蛟O(shè)計(jì)是以要解決的問(wèn)題中所涉及到的各種對(duì)象為主要考慮因素。對(duì)象是一種看問(wèn)題的觀點(diǎn),是對(duì)現(xiàn)實(shí)世界各種元素的一種抽象。對(duì)象既含數(shù)據(jù)又含功能,因此具有自身處理數(shù)據(jù)的能力。對(duì)象被認(rèn)為是迄今為止最接近真實(shí)事物的數(shù)據(jù)抽象。第五頁(yè),共九十三頁(yè)。對(duì)象的幾個(gè)特征原則上,可以將所要解決的問(wèn)題中的任何一個(gè)“概念組件”在程序中表示為一個(gè)對(duì)象。所謂對(duì)一個(gè)對(duì)象發(fā)信息,就是調(diào)用該對(duì)象的一個(gè)方法。對(duì)象+消息第六頁(yè),共九十三頁(yè)。對(duì)象的屬性與方法面向?qū)ο蟪绦蛟O(shè)計(jì)中的對(duì)象是現(xiàn)實(shí)世界對(duì)象的模型化,它同樣具有狀態(tài)和行為。對(duì)象的狀態(tài)用屬性來(lái)維護(hù),對(duì)象的行為用方法來(lái)實(shí)現(xiàn)。因此可以簡(jiǎn)單地講,對(duì)象是面向?qū)ο蟮某绦蛟O(shè)計(jì)模式,它由描述狀態(tài)的屬性(變量)和用來(lái)實(shí)現(xiàn)對(duì)象行為的方法(代碼)組成。幾種叫法屬性—靜態(tài)屬性—域—成員變量狀態(tài)方法—?jiǎng)討B(tài)屬性—成員方法行為第七頁(yè),共九十三頁(yè)。對(duì)象與類(lèi)類(lèi)(Class)是同種對(duì)象的集合與抽象類(lèi)是對(duì)象的抽象及描述,它是具有統(tǒng)一屬性和方法的多個(gè)對(duì)象的統(tǒng)一描述體,是用來(lái)定義一組對(duì)象共有屬性和方法的模板。類(lèi)是用來(lái)創(chuàng)建對(duì)象實(shí)例的樣板,它包含所創(chuàng)建對(duì)象的狀態(tài)描述和方法的定義。類(lèi)是一個(gè)型,而對(duì)象則是這個(gè)型的一個(gè)實(shí)例。類(lèi)是靜態(tài)概念,而對(duì)象則是一個(gè)動(dòng)態(tài)概念,因?yàn)橹挥性谶\(yùn)行時(shí)才給對(duì)象分配空間,對(duì)象才真正存在。第八頁(yè),共九十三頁(yè)。對(duì)象是類(lèi)的唯一性實(shí)例現(xiàn)實(shí)世界

實(shí)體抽象數(shù)據(jù)類(lèi)型計(jì)算機(jī)世界對(duì)象

類(lèi)抽象映射

計(jì)算機(jī)邏輯的實(shí)現(xiàn)實(shí)例化抽象概念世界第九頁(yè),共九十三頁(yè)。接口與實(shí)現(xiàn)類(lèi)是一種封裝技術(shù)。如果屬性或方法被定義為public,它就是接口的一部分,其他類(lèi)可以直接訪問(wèn)它。如果屬性或方法被定義為private,它就是實(shí)現(xiàn)的一部分。只有類(lèi)自己的方法可以訪問(wèn)它。對(duì)象要注意保護(hù)自己的數(shù)據(jù)(私有屬性,公有方法)。對(duì)象通過(guò)它們的方法管理,實(shí)現(xiàn)由編程人員控制。通過(guò)接口與對(duì)象發(fā)生作用,內(nèi)部實(shí)現(xiàn)不影響接口(汽車(chē),內(nèi)部變化不影響駕駛)程序一部分變化不會(huì)影響其他部分。復(fù)用事先寫(xiě)好的操作可在整個(gè)項(xiàng)目中使用重用比重寫(xiě)更容易第十頁(yè),共九十三頁(yè)。對(duì)象與類(lèi)—幾種相互關(guān)系包含關(guān)系當(dāng)對(duì)象A是對(duì)象B的屬性時(shí),我們稱對(duì)象B包含對(duì)象A。

關(guān)聯(lián)關(guān)系當(dāng)對(duì)象A的引用是對(duì)象B的屬性時(shí),我們稱對(duì)象A和對(duì)象B之間是關(guān)聯(lián)關(guān)系。

類(lèi)之間的繼承關(guān)系B類(lèi)繼承了A類(lèi),就是繼承了A類(lèi)的屬性和方法。A類(lèi)稱之為父類(lèi),B類(lèi)稱之為子類(lèi)。第十一頁(yè),共九十三頁(yè)。面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)第十二頁(yè),共九十三頁(yè)。主要內(nèi)容抽象封裝繼承多態(tài)類(lèi)定義重載包接口第十三頁(yè),共九十三頁(yè)。OOP的主要特點(diǎn)抽象去除對(duì)象中與主旨無(wú)關(guān)的次要部分,而僅僅抽取出與研究有關(guān)的內(nèi)容(數(shù)據(jù)抽象)

第十四頁(yè),共九十三頁(yè)。OOP的主要特點(diǎn)封裝(encapsulation)實(shí)現(xiàn)了信息的隱藏及安全性提高了程序的模塊化,且易于維護(hù)第十五頁(yè),共九十三頁(yè)。封裝-信息隱藏封裝─是一種組織軟件的方法。其基本思想是把客觀世界中聯(lián)系緊密的元素及相關(guān)操作組織在一起,使其相互關(guān)系隱藏在內(nèi)部,而對(duì)外僅僅表現(xiàn)為與其他封裝體間的接口。從而構(gòu)造出具有獨(dú)立含義的軟件實(shí)現(xiàn)。封裝并不是一個(gè)新的概念,但在面向?qū)ο蟮某绦蛟O(shè)計(jì)中提出了一種全新的封裝方法─類(lèi)第十六頁(yè),共九十三頁(yè)。封裝-信息隱藏封裝─就是利用抽象數(shù)據(jù)類(lèi)型將數(shù)據(jù)和基于數(shù)據(jù)的操作封裝在一起,數(shù)據(jù)被保護(hù)在抽象數(shù)據(jù)類(lèi)型的內(nèi)部,系統(tǒng)的其他部分只有通過(guò)包裹在數(shù)據(jù)外面的被授權(quán)的操作,才能與這些抽象數(shù)據(jù)類(lèi)型交流和交互。在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,抽象數(shù)據(jù)類(lèi)型是用“類(lèi)”來(lái)代表的。第十七頁(yè),共九十三頁(yè)。封裝-信息隱藏每個(gè)類(lèi)里都封裝了相關(guān)的數(shù)據(jù)和操作。在實(shí)際的開(kāi)發(fā)過(guò)程中,類(lèi)多用來(lái)構(gòu)建系統(tǒng)內(nèi)部的模塊。由于封裝特性把類(lèi)內(nèi)的數(shù)據(jù)保護(hù)得很?chē)?yán)密,模塊與模塊間僅通過(guò)嚴(yán)格控制的界面進(jìn)行交互,使它們之間耦合和交叉大大減少,從而降低了開(kāi)發(fā)過(guò)程的復(fù)雜性,提高了效率和質(zhì)量,減少了可能的錯(cuò)誤,同時(shí)也保證了程序中數(shù)據(jù)的完整性和安全性。

第十八頁(yè),共九十三頁(yè)。OOP的主要特點(diǎn)繼承(inheritance)體現(xiàn)了對(duì)現(xiàn)實(shí)世界的抽象模擬提高了代碼的復(fù)用性交通工具車(chē)船飛機(jī)汽車(chē)火車(chē)父類(lèi)/超類(lèi)(superclass)子類(lèi)(subclass)Java僅支持單重繼承,但可通過(guò)接口實(shí)現(xiàn)多重繼承第十九頁(yè),共九十三頁(yè)。OOP的主要特點(diǎn)多態(tài)(polymorphism)

用同一個(gè)名字調(diào)用實(shí)現(xiàn)不同操作的方法方式1:不同的類(lèi)之間的同名方法 如:中國(guó)人/日本人/美國(guó)人說(shuō)話方式2:參數(shù)不同的同名方法使用方便,且降低了維護(hù)和編程量第二十頁(yè),共九十三頁(yè)。Java中的類(lèi)幾個(gè)概念類(lèi):同種對(duì)象的集合與抽象系統(tǒng)類(lèi)庫(kù)中已定義好的類(lèi):是系統(tǒng)提供的已實(shí)現(xiàn)的標(biāo)準(zhǔn)類(lèi)的集合,是Java的API,它可幫助開(kāi)發(fā)者方便、快捷地開(kāi)發(fā)Java程序。用戶自定義的類(lèi)─針對(duì)特定問(wèn)題子類(lèi)、父類(lèi)第二十一頁(yè),共九十三頁(yè)。Java中的類(lèi)Java中的類(lèi)結(jié)構(gòu)基類(lèi):所有Java的類(lèi)都派生自O(shè)bjectJava的類(lèi)可組織在包(package)中Java提供的標(biāo)準(zhǔn)類(lèi)庫(kù)分布在一系列的包中,如java.lang,java.util,等編程的過(guò)程就是繼承基類(lèi)或標(biāo)準(zhǔn)類(lèi)而創(chuàng)建、定義特殊子類(lèi)的過(guò)程第二十二頁(yè),共九十三頁(yè)。Java中類(lèi)的聲明類(lèi)說(shuō)明語(yǔ)法:[類(lèi)修飾符]class類(lèi)名[extends父類(lèi)名][implements接口名]{ 成員變量定義; 方法定義;}類(lèi)體第二十三頁(yè),共九十三頁(yè)。Java中類(lèi)的聲明類(lèi)修飾符(Modifier):public:允許其他類(lèi)(沒(méi)有限制)訪問(wèn)本類(lèi),一個(gè)源文件僅可以有一個(gè)public類(lèi)缺省:可被當(dāng)前包中的其他類(lèi)訪問(wèn)abstract:沒(méi)有實(shí)例的抽象概念類(lèi),是它的所有子類(lèi)的公共屬性和公共方法的集合final:不能再被擴(kuò)展,不能有子類(lèi)的類(lèi);易于安全性的實(shí)現(xiàn),或用于創(chuàng)建固定功能的類(lèi)父類(lèi)繼承聲明:extends

父類(lèi)名實(shí)現(xiàn)接口(interface):implements

接口名第二十四頁(yè),共九十三頁(yè)。Java中類(lèi)的聲明例:

publicabstractclassshape{……} classrectangleextendsshape{……} finalclassroundrectextendsrectangle{ ……}第二十五頁(yè),共九十三頁(yè)。創(chuàng)建對(duì)象對(duì)象(實(shí)例instance):以類(lèi)為模板創(chuàng)建的

具體實(shí)例(實(shí)際個(gè)體)創(chuàng)建某個(gè)類(lèi)的具體對(duì)象(類(lèi)似變量聲明)類(lèi)名欲創(chuàng)建的對(duì)象名=new類(lèi)名(參數(shù)表);

例如:

Strings=newString(“Hello!”);第二十六頁(yè),共九十三頁(yè)。類(lèi)的成員變量的聲明聲明成員變量(member)的語(yǔ)法 [修飾符]數(shù)據(jù)類(lèi)型變量名;引用:對(duì)象名.變量名修飾符訪問(wèn)控制符public:可被所有其他類(lèi)引用private:僅可被該類(lèi)自身引用和修改,不能被其他任何類(lèi)(包括該類(lèi)的子類(lèi))引用,它提供了最高級(jí)別的保護(hù)。第二十七頁(yè),共九十三頁(yè)。成員變量的聲明protected:該類(lèi)自身、子類(lèi)、同一包中的其他類(lèi)privateprotected:該類(lèi)自身、子類(lèi)注:privateprotected僅1.0.2支持,1.1之后不再支持缺?。罕景械念?lèi)static:類(lèi)成員變量,對(duì)所有的實(shí)例一致,引用時(shí)前綴可使用類(lèi)名或?qū)ο竺鹒inal:數(shù)值不變常量,定義同時(shí)應(yīng)對(duì)其進(jìn)行初始化

第二十八頁(yè),共九十三頁(yè)。類(lèi)成員變量(靜態(tài)變量)靜態(tài)變量——為類(lèi)的各實(shí)例共享的變量。

static靜態(tài)變量名;位于類(lèi)的內(nèi)存區(qū)域中,為該類(lèi)的各個(gè)對(duì)象共享.無(wú)此限定符的變量是實(shí)例變量。

classex{inti;staticintj;staticfinalintk=10;---}final常量可同時(shí)定義為static類(lèi)exjk=10對(duì)象1i:3對(duì)象2i:5第二十九頁(yè),共九十三頁(yè)。類(lèi)成員變量(靜態(tài)變量)實(shí)現(xiàn)各實(shí)例之間的通訊

對(duì)于該類(lèi)的任何一個(gè)對(duì)象訪問(wèn)該靜態(tài)變量時(shí),取得的都是相同的值跟蹤創(chuàng)建的實(shí)例數(shù)

publicclassCount{privateintserial;//實(shí)例變量

privatestaticintcounter=0;//靜態(tài)變量

publicCount(){counter++;serial=counter;}}靜態(tài)變量類(lèi)似于某些語(yǔ)言中的全局變量第三十頁(yè),共九十三頁(yè)。類(lèi)成員變量(靜態(tài)變量)非private的靜態(tài)變量無(wú)須創(chuàng)建實(shí)例就可以從類(lèi)的外部訪問(wèn)。

classStaticVar{

staticintx=100;}publicclasstest{publicvoidm(){

intm=StaticVar.x;

}}

第三十一頁(yè),共九十三頁(yè)。方法的聲明定義對(duì)類(lèi)內(nèi)成員變量(數(shù)據(jù))的操作方法的聲明語(yǔ)法:

[修飾符]返回類(lèi)型方法名(參數(shù)列表) [throws例外名]{ 方法體; }方法是類(lèi)的動(dòng)態(tài)屬性,標(biāo)志了類(lèi)所具有的功能和操作第三十二頁(yè),共九十三頁(yè)。類(lèi)的方法定義規(guī)則形式參數(shù)是方法從調(diào)用它的環(huán)境輸入的數(shù)據(jù)。返回值是方法在操作完成后返還給調(diào)用它的環(huán)境的數(shù)據(jù)。要指定方法返回值類(lèi)型。如沒(méi)有返回值,類(lèi)型要寫(xiě)void方法名相同,但參數(shù)不同,是不同的方法。與類(lèi)名相同的所有方法都是類(lèi)的構(gòu)造方法。第三十三頁(yè),共九十三頁(yè)。方法體的定義在方法中定義的變量稱為局部變量。其生命周期:執(zhí)行進(jìn)入方法體時(shí)建立,退出方法時(shí)撤消。局部變量使用之前必須初始化。在方法體中可以訪問(wèn)所有的類(lèi)屬性,可以調(diào)用所有類(lèi)中定義的方法。方法可以遞歸調(diào)用。第三十四頁(yè),共九十三頁(yè)。方法的聲明修飾符(Modifier):訪問(wèn)控制符:public、private、protected、privateprotectedstatic:靜態(tài)方法,又稱類(lèi)方法使用類(lèi)名或?qū)ο竺鳛榍熬Y,建議使用類(lèi)名在方法體中只能使用static變量和static方法abstract:只有方法頭,而沒(méi)有具體的方法體和操作實(shí)現(xiàn)的方法,要在子類(lèi)中通過(guò)重新定義(override)來(lái)實(shí)現(xiàn)final:不能被重新定義(override)的方法第三十五頁(yè),共九十三頁(yè)。訪問(wèn)控制符是一組起到限定類(lèi)、域或方法是否可以被程序里的其他部分訪問(wèn)和調(diào)用的修飾符。類(lèi)訪問(wèn)控制符公共類(lèi):public類(lèi)名一般類(lèi)(缺省)一個(gè)類(lèi)被聲明為公共類(lèi),表明它可以被所有的其他類(lèi)所訪問(wèn)和引用。程序的其他部分可以創(chuàng)建這個(gè)類(lèi)的對(duì)象、訪問(wèn)這個(gè)類(lèi)的內(nèi)部可見(jiàn)成員變量和調(diào)用它的可見(jiàn)方法一般類(lèi)只能被同一包中的類(lèi)訪問(wèn)和引用。定義在同一個(gè)程序中的所有類(lèi)屬于一個(gè)包。訪問(wèn)控制符第三十六頁(yè),共九十三頁(yè)。一個(gè)類(lèi)作為整體對(duì)程序的其他部分可見(jiàn),并不能代表類(lèi)內(nèi)的所有成員變量和方法也同時(shí)對(duì)程序的其他部分可見(jiàn),前者只是后者的必要條件成員變量和方法的可見(jiàn)性域和方法的訪問(wèn)限定符只限在本類(lèi)內(nèi)使用。private可被同包中其他類(lèi)使用。可被子類(lèi)繼承(包括位于不同包中的子類(lèi))protected公共變量和公共方法,可被任何類(lèi)使用。public可被同包中其他類(lèi)使用。無(wú)訪問(wèn)限定符第三十七頁(yè),共九十三頁(yè)。域和方法的訪問(wèn)限定符為了使對(duì)象具有良好的封裝性,一般將類(lèi)的實(shí)例變量設(shè)計(jì)成私有。為了使其它類(lèi)或?qū)ο竽軌蛟L問(wèn)私有實(shí)例變量,本類(lèi)必須提供訪問(wèn)私有變量的方法(公共方法)。按照慣例,讀私有變量的方法取名為get…

寫(xiě)私有變量的方法取名為set…

第三十八頁(yè),共九十三頁(yè)。方法的聲明(續(xù))返回類(lèi)型:void、return參數(shù)列表:參數(shù)類(lèi)型可為類(lèi)類(lèi)型throws:通告本方法中會(huì)產(chǎn)生的例外(異常)類(lèi)型,提醒調(diào)用者要對(duì)相應(yīng)的可能例外進(jìn)行處理。當(dāng)執(zhí)行此方法并發(fā)生了例外時(shí),程序會(huì)轉(zhuǎn)入調(diào)用者編制的例外處理程序段。第三十九頁(yè),共九十三頁(yè)。方法的參數(shù)參數(shù)是值傳遞對(duì)象的內(nèi)容可以改變,但對(duì)象的引用決不會(huì)改變。方法的參數(shù)可以與類(lèi)的成員變量同名,這時(shí),參數(shù)在方法體中將隱藏同名的成員變量。

classcircle{intx,y,radius;setCircle(intx,inty,intradius){…}}第四十頁(yè),共九十三頁(yè)。值傳送與地址傳送ABABAB引用類(lèi)型值傳送基本類(lèi)型值傳送地址傳送40x2F0x2F第四十一頁(yè),共九十三頁(yè)。方法的說(shuō)明為Employee類(lèi)增加打印方法——將數(shù)據(jù)和代碼封裝在一個(gè)單一的實(shí)體中。

classEmployee{Stringname;intage;floatsalary;voidprint(){System.out.println(name+“年齡為:”+

age+“月薪為:”+salary);}}//class第四十二頁(yè),共九十三頁(yè)。對(duì)象方法的含義

Employeeemp=newEmployee();=“張立”;

emp.age=21;emp.salary=528.37F;一旦對(duì)象被建立并被初始化,就可以調(diào)用該方法打印這個(gè)對(duì)象的數(shù)據(jù)。

emp.print();對(duì)象emp執(zhí)行print方法操作自己的數(shù)據(jù)。向?qū)ο蟀l(fā)消息,讓對(duì)象做某件事。第四十三頁(yè),共九十三頁(yè)。this與superthis和super是常用來(lái)指代子類(lèi)對(duì)象和父類(lèi)對(duì)象的關(guān)鍵字。Java系統(tǒng)默認(rèn),每個(gè)類(lèi)缺省地具有null、this和super三個(gè)域,所以在任意類(lèi)中都可以不加說(shuō)明而直接使用它們。this表示的是當(dāng)前對(duì)象本身,更確切地說(shuō),this代表了當(dāng)前對(duì)象的一個(gè)引用。利用this可以使用當(dāng)前對(duì)象的域,調(diào)用當(dāng)前對(duì)象的方法。super

表示的是當(dāng)前對(duì)象的直接父類(lèi)對(duì)象,是當(dāng)前對(duì)象的直接父類(lèi)對(duì)象的引用。第四十四頁(yè),共九十三頁(yè)。方法中使用this

classBanana{voidf(inti){...}}Bananaa=newBanana();b=newBanana();a.f(1);b.f(2);方法如何知道是處理哪個(gè)對(duì)象?編譯做了一些內(nèi)部處理

Banana.f(a,1);

Banana.f(b,2);

把一個(gè)隱含的參數(shù)傳給了方法—指向被操作對(duì)象的引用。第四十五頁(yè),共九十三頁(yè)。thisthis

只能在方法中使用,表示當(dāng)前對(duì)象,或類(lèi)的當(dāng)前實(shí)例。this適用于一些特殊的場(chǎng)合。例:

publicclassMyDate{intday,month,year;publicvoidborn(){Birthdaybd=newBirthday(this);…}}第四十六頁(yè),共九十三頁(yè)。Java中的多態(tài)多態(tài):同一程序中同名的不同方法共存可以通過(guò)子類(lèi)對(duì)父類(lèi)方法的覆蓋實(shí)現(xiàn)多態(tài)可以利用重載(overload)在同一個(gè)類(lèi)中定義多個(gè)同名的方法多態(tài)情況下進(jìn)行方法調(diào)用時(shí),如何區(qū)分這些同名的不同方法不同類(lèi)中的同名方法:冠以類(lèi)名以示區(qū)別同類(lèi)中的同名方法:用不同的參數(shù)列表(參數(shù)的個(gè)數(shù),類(lèi)型,順序的不同)來(lái)區(qū)別同名的不同方法第四十七頁(yè),共九十三頁(yè)。多態(tài)例:Shapes.java三個(gè)類(lèi)Circle、Square、Triangle均有draw()方法和erase()方法,但不同類(lèi)的方法的具體操作其實(shí)并不相同,實(shí)現(xiàn)了多態(tài)。draw()erase()draw()erase()draw()erase()第四十八頁(yè),共九十三頁(yè)。Overloding方法重載用同一個(gè)名字來(lái)表示不同的方法。這些方法同名的原因,是因?yàn)樗鼈兊淖罱K功能和目的都相同,但由于在完成同一功能時(shí),可能遇到不同的具體情況,所以需要定義含不同的具體內(nèi)容的方法。方法名必須相同(是同一類(lèi)中定義同名方法的情況)。方法的參數(shù)必須不同(同名不同方法是靠不同形式的參數(shù)列表來(lái)區(qū)分,包括形式參數(shù)的個(gè)數(shù)、類(lèi)型、順序的不同)。返回類(lèi)型可以不同,但不是重載的標(biāo)志。利用“重名”現(xiàn)象提高程序的抽象度和簡(jiǎn)潔性。第四十九頁(yè),共九十三頁(yè)。方法的重載例:(相同類(lèi)型的工作,不同的參數(shù))

publicvoidprintln(inti);publicvoidprintln(floatf);publicvoidprintln(Strings);

Integer類(lèi)

StringtoString();staticStringtoString(inti);Double類(lèi)

StringtoString();staticStringtoString(doubled);在一個(gè)類(lèi)中,不可以存在兩個(gè)只有返回值不同的方法

第五十頁(yè),共九十三頁(yè)。構(gòu)造方法(constructor)問(wèn)題的提出Java試圖在每個(gè)對(duì)象一誕生時(shí),就給它一確定的狀態(tài),但有時(shí)這種系統(tǒng)的缺省初值不合適;所以

在創(chuàng)建一個(gè)新對(duì)象時(shí),需用構(gòu)造方法完成合法的

初始化,使類(lèi)內(nèi)成員的初始化工作不依賴于外界

完成。第五十一頁(yè),共九十三頁(yè)。構(gòu)造方法構(gòu)造方法是一種特殊的成員方法,在創(chuàng)建每個(gè)新的類(lèi)對(duì)象時(shí)自動(dòng)執(zhí)行,以保證新對(duì)象的各成員有合法、確定的數(shù)值。構(gòu)造方法的名字就是類(lèi)的名字。構(gòu)造方法沒(méi)有返回類(lèi)型。主要用于完成變量的初始化;另外,一個(gè)類(lèi)中可以存在多個(gè)構(gòu)造方法(重載),這些構(gòu)造方法之間可以互相調(diào)用,當(dāng)一個(gè)構(gòu)造方法調(diào)用另一個(gè)構(gòu)造方法時(shí),要使用關(guān)鍵字this,同時(shí)這個(gè)調(diào)用語(yǔ)句應(yīng)該是整個(gè)構(gòu)造方法的第一條可執(zhí)行語(yǔ)句。第五十二頁(yè),共九十三頁(yè)。構(gòu)造方法構(gòu)造方法只能在創(chuàng)建類(lèi)對(duì)象時(shí)由系統(tǒng)隱含調(diào)用,而不能直接引用;類(lèi)對(duì)象創(chuàng)建時(shí),利用運(yùn)算符new在內(nèi)存中開(kāi)辟專(zhuān)用空間,存放指定的類(lèi)的實(shí)例(即對(duì)象),這時(shí)會(huì)自動(dòng)執(zhí)行類(lèi)的構(gòu)造方法,初始化新對(duì)象的成員變量。第五十三頁(yè),共九十三頁(yè)。定義構(gòu)造方法

Employee(Stringn,inta,floats){name=n;if(a>=18&&a<=60)age=a;else{System.out.println("illegalage");System.exit(1);}salary=s;}第五十四頁(yè),共九十三頁(yè)。構(gòu)造方法的重載D200_Card(){}//沒(méi)有參數(shù)的構(gòu)造方法D200_Card(longcn){//有一個(gè)參數(shù)的構(gòu)造方法

cardNumber=cn;//初始化電話卡號(hào)}D200_Card(longcn,intpw){//兩個(gè)參數(shù)的構(gòu)造方法

cardNumber=cn; password=pw;//密碼}D200_Card(longcn,intpw,doubleb){ cardNumber=cn;//三個(gè)參數(shù)的構(gòu)造方法

password=pw;

balance=b;//余額}第五十五頁(yè),共九十三頁(yè)。構(gòu)造方法的重載D200_Card(longcn,intpw,doubleb,Stringc){ cardNumber=cn;//四個(gè)參數(shù)的構(gòu)造方法

password=pw; balance=b; connectNumber=c;//接入號(hào)碼}調(diào)用不同的構(gòu)造方法D200_Cardmy200=newD200_Card(); D200_Cardmy200=newD200_Card(12345678,1234);D200_Cardmy200=newD200_Card(12345678,1234,50.0);第五十六頁(yè),共九十三頁(yè)。構(gòu)造方法之間的調(diào)用D200_Card(longcn){ cardNumber=cn;}D200_Card(longcn,intpw){ this(cn); password=pw;}D200_Card(longcn,intpw,doubleb){ this(cn,pw); balance=b;}

D200_Card(longcn,intpw,doubleb,Stringc){ this(cn,pw,b); connectNumber=c;}

第五十七頁(yè),共九十三頁(yè)。繼承繼承是一種由已有的類(lèi)創(chuàng)建新類(lèi)的機(jī)制,是面向?qū)ο蟪绦蛟O(shè)計(jì)的基石之一。子類(lèi)繼承父類(lèi)的非私有屬性和方法,還可以定義新的屬性和方法,改寫(xiě)父類(lèi)的方法。繼承實(shí)際上是存在于面向?qū)ο蟪绦蛑械膬蓚€(gè)類(lèi)之間的一種關(guān)系。Java要求每個(gè)類(lèi)都有父類(lèi)(隱含為java.lang包中的Object類(lèi))。super是對(duì)父類(lèi)的引用,引用父類(lèi)的構(gòu)造方法、父類(lèi)成員屬性和方法。第五十八頁(yè),共九十三頁(yè)。Java中類(lèi)的繼承創(chuàng)建類(lèi)時(shí)指明它為某存在類(lèi)的子類(lèi)

extends

超類(lèi)/父類(lèi)名父類(lèi)來(lái)自系統(tǒng)類(lèi)庫(kù)用戶自定義類(lèi)子類(lèi)將繼承除private外所有父類(lèi)成員Java不支持多重繼承(但可用接口實(shí)現(xiàn))第五十九頁(yè),共九十三頁(yè)。Java中類(lèi)的繼承子類(lèi)對(duì)父類(lèi)可做擴(kuò)展和特殊化創(chuàng)建新的成員:變量和方法m_lNextSaveAccNum,m_lNextCheckAccNum重新定義父類(lèi)中已有的變量:隱藏m_dInterestRate重新定義父類(lèi)中已有的方法:覆蓋(override)

子類(lèi)中的方法應(yīng)與父類(lèi)中的被覆蓋的方法有完全相同的:參數(shù)列表、返回值setInterestRate()第六十頁(yè),共九十三頁(yè)。類(lèi)的繼承引用類(lèi)的成員變量或方法時(shí)的前綴this:當(dāng)前類(lèi)的方法或變量super:直接父類(lèi)的成員(只能上溯一層)例:BankAccount類(lèi) SaveAccount子類(lèi)

this.Fee():調(diào)用子類(lèi)的收取費(fèi)用方法

super.Fee():調(diào)用父類(lèi)的收取費(fèi)用方法子類(lèi)對(duì)象可類(lèi)型轉(zhuǎn)換成父類(lèi)對(duì)象(upcast)BankAccountMyBa=(BankAccount)MySa;第六十一頁(yè),共九十三頁(yè)。繼承屬性:nameagesalary方法:upSalarygetInfoEmployeeEngineerManagerSecretaryDirector屬性:allowance方法:setAllowancegetInfo屬性:telephonedepartment方法:setTelgetInfo第六十二頁(yè),共九十三頁(yè)。構(gòu)造方法的繼承子類(lèi)或定義自己的構(gòu)造方法,或使用隱含構(gòu)造方法。子類(lèi)沒(méi)有定義構(gòu)造方法時(shí),自動(dòng)繼承父類(lèi)不含參數(shù)的構(gòu)造方法,并在創(chuàng)建新子類(lèi)對(duì)象時(shí)自動(dòng)執(zhí)行。子類(lèi)有自己的構(gòu)造方法時(shí),創(chuàng)建新子類(lèi)對(duì)象時(shí)也要先執(zhí)行父類(lèi)不含參數(shù)的構(gòu)造方法,再執(zhí)行自己的構(gòu)造方法。第六十三頁(yè),共九十三頁(yè)。構(gòu)造方法的繼承注意構(gòu)造方法的調(diào)用順序:按繼承順序依次調(diào)用父類(lèi)的不含參數(shù)的構(gòu)造方法,直到到達(dá)本子類(lèi)依次執(zhí)行本子類(lèi)成員對(duì)象的構(gòu)造方法最后,執(zhí)行本子類(lèi)的構(gòu)造方法Meal()->Lunch()->PortableLunch()->Bread()->Cheese()->Lettuce()->Sandwich()第六十四頁(yè),共九十三頁(yè)。抽象與抽象類(lèi)程序員可以先創(chuàng)建一個(gè)定義共有屬性和方法的一般類(lèi),再?gòu)囊话泐?lèi)派生出具有特性的新類(lèi)。抽象類(lèi)實(shí)際上是所有子類(lèi)的公共域和公共方法的集合,而每一個(gè)子類(lèi)則是父類(lèi)的特殊化,是對(duì)公共域和方法在功能、內(nèi)涵方面的擴(kuò)展和延伸。

第六十五頁(yè),共九十三頁(yè)。類(lèi)繼承樹(shù)Objectclassabstractclass

classfinalclassclassJava—單重繼承第六十六頁(yè),共九十三頁(yè)。抽象類(lèi)與最終類(lèi)abstract抽象類(lèi)—沒(méi)有具體對(duì)象的概念類(lèi)較高層次的概括抽象類(lèi)的作用是讓其他類(lèi)來(lái)繼承它的抽象化的特征。在程序中不能用抽象類(lèi)作為模板來(lái)創(chuàng)建對(duì)象。final最終類(lèi)—該類(lèi)不能有子類(lèi)。電話卡類(lèi)無(wú)卡號(hào)類(lèi)有卡號(hào)類(lèi)磁卡IC卡校園201卡IP卡200卡第六十七頁(yè),共九十三頁(yè)。方法覆蓋(overriding)在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,子類(lèi)可以把從父類(lèi)那里繼承來(lái)的某個(gè)方法改寫(xiě),形成同父類(lèi)方法同名、解決的問(wèn)題也相似、但具體實(shí)現(xiàn)和功能卻不盡一致的新方法。定義與父類(lèi)完全相同的方法,實(shí)現(xiàn)對(duì)父類(lèi)方法的覆蓋:完全相同的方法名完全相同的參數(shù)列表完全相同類(lèi)型的返回值注意:在滿足上述三個(gè)條件同時(shí),還必須保證:訪問(wèn)權(quán)限不能縮小,拋出的例外要相同第六十八頁(yè),共九十三頁(yè)。包(package)利用面向?qū)ο蠹夹g(shù)開(kāi)發(fā)系統(tǒng)時(shí),通常需要定義許多類(lèi)共同工作,為了更好地管理這些類(lèi),JAVA中引入了包的概念。象文件夾把各種文件組織在一起一樣,JAVA中的包把各種類(lèi)組織在一起,使得程序功能清楚,結(jié)構(gòu)分明。第六十九頁(yè),共九十三頁(yè)。包(package)在操作系統(tǒng)中,目錄用來(lái)組織文件,設(shè)置權(quán)限。Java利用包來(lái)組織相關(guān)的類(lèi),并控制訪問(wèn)權(quán)限。包是一種松散的類(lèi)的集合。一般不要求處于同一個(gè)包中的類(lèi)有明確的相互關(guān)系,如包含、繼承等等。由于同一包中的類(lèi)在缺省情況下可以互相訪問(wèn),所以為了方便編程和管理,通常把需要在一起工作的類(lèi)放在一個(gè)包里。利用包來(lái)管理類(lèi),可實(shí)現(xiàn)類(lèi)的共享與復(fù)用(類(lèi)庫(kù))。第七十頁(yè),共九十三頁(yè)。包與目錄一個(gè)包要放在指定目錄下。classpath指定搜尋包的路徑。一個(gè)包可以包含若干個(gè)類(lèi)文件,還可包含若干包。包名本身又對(duì)應(yīng)一個(gè)目錄(用一個(gè)目錄表示)。包名可以有層次,以小數(shù)點(diǎn)分割。包名一般全小寫(xiě)(類(lèi)名第一個(gè)字母大寫(xiě))。第七十一頁(yè),共九十三頁(yè)。包(package)創(chuàng)建packagepackage包名;每一個(gè)class在編譯的時(shí)候被指定屬于某一特定的package,用關(guān)鍵字package說(shuō)明:

packagesrd.math;//命名要注意唯一性,可使用WWW域名publicclassComplexNumber{……}如果package未指定,則所有的

class都被組合到一個(gè)未命名的缺省package中,不能被其他包中的類(lèi)引用package說(shuō)明必須是非注釋非空行的第一行第七十二頁(yè),共九十三頁(yè)。包(package)創(chuàng)建包就是在當(dāng)前文件夾下創(chuàng)建一個(gè)子文件夾,以便存放包中包含的所有類(lèi)的.class文件。上面創(chuàng)建的包語(yǔ)句中的符號(hào)“.”代表了目錄分割符,即這個(gè)語(yǔ)句創(chuàng)建了兩個(gè)文件夾。第一個(gè)是當(dāng)前文件夾下的子文件夾srd;第二個(gè)是srd下的子文件夾

math,當(dāng)前包中的所有類(lèi)就存放在這個(gè)文件夾中。第七十三頁(yè),共九十三頁(yè)。包(package)使用包:使用其他包中的class,需在引用類(lèi)之前冠以包名作前綴用import語(yǔ)句將此包中的某些或所有class加載入當(dāng)前程序:

importsrd.math.ComplexNumber; importsrd.math.*;包與文件系統(tǒng)每個(gè)包對(duì)應(yīng)一個(gè)同名的路徑,此包中所有class編譯生成的.class文件都在此目錄中;此目錄系統(tǒng)不會(huì)自動(dòng)生成,必須手工創(chuàng)建第七十四頁(yè),共九十三頁(yè)。使用其他包中的類(lèi)import語(yǔ)句將指定包中的類(lèi)引入當(dāng)前的程序中,即告訴編譯到哪去找程序中使用的類(lèi)。

import語(yǔ)句必須出現(xiàn)在所有類(lèi)定義之前。

例:importjava.util.*;

該語(yǔ)句引入整個(gè)utility類(lèi)庫(kù)(標(biāo)準(zhǔn)Java庫(kù)的一部分)例:importjava.util.Vector;

該語(yǔ)句只引入Vector類(lèi),但utility類(lèi)庫(kù)中的其他類(lèi)不可用。第七十五頁(yè),共九十三頁(yè)。接口“接口”是抽象類(lèi)的概念。接口中的方法都是沒(méi)有方法體的抽象方法。接口中只能定義staticfinal屬性。接口定義的僅僅是實(shí)現(xiàn)某一特定功能的一組方法的對(duì)外接口和規(guī)范,而并沒(méi)有真正地實(shí)現(xiàn)這個(gè)功能。接口的功能實(shí)現(xiàn)是在“繼承”了這個(gè)接口的各個(gè)類(lèi)中完成的,由這些類(lèi)來(lái)具體定義接口中所有抽象方法的方法體。通常把對(duì)接口的“繼承”稱為“實(shí)現(xiàn)”。第七十六頁(yè),共九十三頁(yè)。接口(interface)接口是一種特殊的類(lèi),是作為一個(gè)整體聲明的抽象方法和常量方法:抽象、無(wú)定義的(不必寫(xiě)abstract)常量:隱含為final和static的接口定義

publicinterface接口名[extends父接口名列表]{//常量域聲明

publicstaticfinal域類(lèi)型

域名=常量值;

//抽象方法聲明

publicabstract返回值類(lèi)型

方法名(參數(shù)列表);}第七十七頁(yè),共九十三頁(yè)。接口(interface)使用接口當(dāng)一個(gè)類(lèi)聲明

implements某一interface時(shí),必須具體實(shí)現(xiàn)該interface中定義的抽象方法,并把此方法定義為public的。利用接口可實(shí)現(xiàn)多重繼承便于設(shè)計(jì)更合理的類(lèi)層次,代碼更靈活第七十八頁(yè),共九十三頁(yè)。接口的實(shí)現(xiàn)

publicclassMyAppletextendsAppletimplementsRunnable,MouseListener{……}一個(gè)類(lèi)只能有一個(gè)父類(lèi),但是它可以同時(shí)實(shí)現(xiàn)若干個(gè)接口。如果把接口理解成特殊的類(lèi),那么這個(gè)類(lèi)利用接口實(shí)際上就獲得了多個(gè)父類(lèi),即實(shí)現(xiàn)了多繼承。instanceof運(yùn)算符可用來(lái)判斷一個(gè)對(duì)象的類(lèi)是否實(shí)現(xiàn)了某個(gè)接口。第七十九頁(yè),共九十三頁(yè)。接口的實(shí)現(xiàn)一個(gè)類(lèi)要實(shí)現(xiàn)接口時(shí),要注意下列問(wèn)題:在類(lèi)的聲明部分,用implements關(guān)鍵字聲明該類(lèi)將實(shí)現(xiàn)那些接口。如果實(shí)現(xiàn)了某個(gè)接口的類(lèi)不是abstract的抽象類(lèi),則在類(lèi)的定義部分必須實(shí)現(xiàn)指定接口的所有抽象方法,即為所有抽象方法定義方法體。如果實(shí)現(xiàn)了某個(gè)接口的類(lèi)是abstract的抽象類(lèi),則它可以不實(shí)現(xiàn)指定接口的所有抽象方法。第八十頁(yè),共九十三頁(yè)。接口的實(shí)現(xiàn)接口的抽象方法的訪問(wèn)控制符為public,所以類(lèi)在實(shí)現(xiàn)方法時(shí),必須顯式地使用public。實(shí)現(xiàn)接口的類(lèi)要實(shí)現(xiàn)接口的全部方法。如果不需要某個(gè)方法,也要定義成一個(gè)空方法體的方法。如:

public方法名(){}第八十一頁(yè),共九十三頁(yè)。接口例

interfaceCalArea{doublepi=3.14;doublecal(doubler);}classaimplementsCalArea{

publicdoublecal(doubler){returnpi*r*r;}}接口中定義的方法簽名不加任何的修飾符:因?yàn)楸囟閜ublic類(lèi)型第八十二頁(yè),共九十三頁(yè)。接口(interface)例:樂(lè)器族譜Music.javaInstrumentWindPercussionStringed我們可以使用接口來(lái)實(shí)現(xiàn)繼承嗎?第八十三頁(yè),共九十三頁(yè)。interfaceInstrument{//constant:inti=5;//static&final//Cannothavemethoddefinitions:voidplay();//AutomaticallypublicStringwhat();voidadjust();}classWindimplemen

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論