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

下載本文檔

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

文檔簡(jiǎn)介

1、面向?qū)ο蟪绦蛟O(shè)計(jì)概述面向?qū)ο蟪绦蛟O(shè)計(jì)概述程序設(shè)計(jì)方法程序設(shè)計(jì)方法公共數(shù)據(jù)函數(shù)函數(shù)函數(shù)函數(shù)算法數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)方法方法數(shù)據(jù)方法方法過程式程序設(shè)計(jì)OOP程序設(shè)計(jì)對(duì)象消息消息程序設(shè)計(jì)方法程序設(shè)計(jì)方法l面向過程的程序設(shè)計(jì)l面向過程的程序遵循面向過程的問題求解方法l其中心思想是用計(jì)算機(jī)能夠理解的邏輯來描述和表達(dá)待解決的問題及其具體的解決過程。 l算法+數(shù)據(jù)結(jié)構(gòu)l數(shù)據(jù)結(jié)構(gòu)利用計(jì)算機(jī)的離散邏輯來量化表達(dá)需要解決的問題 。l而算法則研究如何快捷、高效地組織解決問題的具體過程。 l面向過程面向機(jī)器程序設(shè)計(jì)方法程序設(shè)計(jì)方法l面向?qū)ο蟮某绦蛟O(shè)計(jì)l它能夠用計(jì)算機(jī)邏輯來模擬、描述系統(tǒng)本身,包括系統(tǒng)的組成,系統(tǒng)的各種可能狀態(tài)

2、,以及系統(tǒng)中可能產(chǎn)生的各種過程與過程引起的系統(tǒng)狀態(tài)切換。l面向?qū)ο蟮某绦蛟O(shè)計(jì)是以要解決的問題中所涉及到的各種對(duì)象為主要考慮因素。l對(duì)象是一種看問題的觀點(diǎn),是對(duì)現(xiàn)實(shí)世界各種元素的一種抽象。對(duì)象既含數(shù)據(jù)又含功能,因此具有自身處理數(shù)據(jù)的能力。對(duì)象被認(rèn)為是迄今為止最接近真實(shí)事物的數(shù)據(jù)抽象。對(duì)象的幾個(gè)特征對(duì)象的幾個(gè)特征l原則上,可以將所要解決的問題中的任何一個(gè)“概念組件”在程序中表示為一個(gè)對(duì)象。l所謂 對(duì)一個(gè)對(duì)象發(fā)信息,就是調(diào)用該對(duì)象的一個(gè)方法。l對(duì)象+消息對(duì)象的屬性與方法對(duì)象的屬性與方法l面向?qū)ο蟪绦蛟O(shè)計(jì)中的對(duì)象是現(xiàn)實(shí)世界對(duì)象的模型化,它同樣具有狀態(tài)和行為。l對(duì)象的狀態(tài)用屬性來維護(hù),l對(duì)象的行為用方法

3、來實(shí)現(xiàn)。l因此可以簡(jiǎn)單地講,對(duì)象是面向?qū)ο蟮某绦蛟O(shè)計(jì)模式,它由描述狀態(tài)的屬性(變量)和用來實(shí)現(xiàn)對(duì)象行為的方法(代碼)組成。l幾種叫法l屬性 靜態(tài)屬性 域 成員變量 狀態(tài)l方法 動(dòng)態(tài)屬性 成員方法 行為對(duì)象與類對(duì)象與類l類(Class)是同種對(duì)象的集合與抽象l類是對(duì)象的抽象及描述,它是具有統(tǒng)一屬性和方法的多個(gè)對(duì)象的統(tǒng)一描述體,是用來定義一組對(duì)象共有屬性和方法的模板。l類是用來創(chuàng)建對(duì)象實(shí)例的樣板,它包含所創(chuàng)建對(duì)象的狀態(tài)描述和方法的定義。類是一個(gè)型,而對(duì)象則是這個(gè)型的一個(gè)實(shí)例。l類是靜態(tài)概念,而對(duì)象則是一個(gè)動(dòng)態(tài)概念,因?yàn)橹挥性谶\(yùn)行時(shí)才給對(duì)象分配空間,對(duì)象才真正存在。對(duì)象是類的唯一性實(shí)例對(duì)象是類的唯一

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

5、系l包含關(guān)系l當(dāng)對(duì)象A是對(duì)象B的屬性時(shí),我們稱對(duì)象B包含對(duì)象A。 l關(guān)聯(lián)關(guān)系l當(dāng)對(duì)象A的引用是對(duì)象B的屬性時(shí),我們稱對(duì)象A和對(duì)象B之間是關(guān)聯(lián)關(guān)系。 l類之間的繼承關(guān)系lB類繼承了A類,就是繼承了A類的屬性和方法。lA類稱之為父類,B類稱之為子類。面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)主要內(nèi)容主要內(nèi)容l 抽象l 封裝l 繼承l(wèi) 多態(tài)l 類定義l 重載l 包l 接口OOP的主要特點(diǎn)的主要特點(diǎn)l抽象去除對(duì)象中與主旨無關(guān)的次要部分,而 僅僅抽取出與研究有關(guān)的內(nèi)容(數(shù)據(jù)抽象) OOP的主要特點(diǎn)的主要特點(diǎn)l封裝(encapsulation)l實(shí)現(xiàn)了信息的隱藏及安全性l提高了程序的模塊化,且易于維護(hù)封裝封

6、裝-信息隱藏信息隱藏l封裝 是一種組織軟件的方法。其基本思想是把客觀世界中聯(lián)系緊密的元素及相關(guān)操作組織在一起,使其相互關(guān)系隱藏在內(nèi)部,而對(duì)外僅僅表現(xiàn)為與其他封裝體間的接口。從而構(gòu)造出具有獨(dú)立含義的軟件實(shí)現(xiàn)。l封裝并不是一個(gè)新的概念,但在面向?qū)ο蟮某绦蛟O(shè)計(jì)中提出了一種全新的封裝方法 類封裝封裝-信息隱藏信息隱藏l封裝 就是利用抽象數(shù)據(jù)類型將數(shù)據(jù)和基于數(shù)據(jù)的操作封裝在一起,數(shù)據(jù)被保護(hù)在抽象數(shù)據(jù)類型的內(nèi)部,系統(tǒng)的其他部分只有通過包裹在數(shù)據(jù)外面的被授權(quán)的操作,才能與這些抽象數(shù)據(jù)類型交流和交互。l在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,抽象數(shù)據(jù)類型是用“類”來代表的。封裝封裝-信息隱藏信息隱藏l每個(gè)類里都封裝了相關(guān)的數(shù)

7、據(jù)和操作。在實(shí)際的開發(fā)過程中,類多用來構(gòu)建系統(tǒng)內(nèi)部的模塊。l由于封裝特性把類內(nèi)的數(shù)據(jù)保護(hù)得很嚴(yán)密,模塊與模塊間僅通過嚴(yán)格控制的界面進(jìn)行交互,使它們之間耦合和交叉大大減少,從而降低了開發(fā)過程的復(fù)雜性,提高了效率和質(zhì)量,減少了可能的錯(cuò)誤,同時(shí)也保證了程序中數(shù)據(jù)的完整性和安全性。 OOP的主要特點(diǎn)的主要特點(diǎn)l繼承(inheritance)l體現(xiàn)了對(duì)現(xiàn)實(shí)世界的抽象模擬l提高了代碼的復(fù)用性交通工具車船飛機(jī)汽車火車父類/超類(superclass)子類(subclass)Java僅支持單重繼承,但可通過接口實(shí)現(xiàn)多重繼承OOP的主要特點(diǎn)的主要特點(diǎn)l多態(tài)(polymorphism) l用同一個(gè)名字調(diào)用實(shí)現(xiàn)不同

8、操作的方法l方式1:不同的類之間的同名方法 如:中國(guó)人/日本人/美國(guó)人 說話l方式2:參數(shù)不同的同名方法l使用方便,且降低了維護(hù)和編程量Java中的類中的類l幾個(gè)概念l類:同種對(duì)象的集合與抽象 l系統(tǒng)類庫(kù)中已定義好的類:是系統(tǒng)提供 的已實(shí)現(xiàn)的標(biāo)準(zhǔn)類的集合,是Java的API,它可幫助開發(fā)者方便、快捷地開發(fā)Java程序。l用戶自定義的類 針對(duì)特定問題l子類、父類Java中的類中的類lJava中的類結(jié)構(gòu)l基類:所有Java的類都派生自O(shè)bjectlJava的類可組織在包(package)中l(wèi)Java提供的標(biāo)準(zhǔn)類庫(kù)分布在一系列的包中,如java.lang,java.util,等 l編程的過程就是繼承

9、基類或標(biāo)準(zhǔn)類而創(chuàng)建、定義特殊子類的過程Java中類的聲明中類的聲明l類說明語(yǔ)法: 類修飾符 class 類名 extends 父類名 implements 接口名 成員變量定義;方法定義;類體Java中類的聲明中類的聲明l類修飾符(Modifier):lpublic:允許其他類(沒有限制)訪問本類,一個(gè) 源文件僅可以有一個(gè)public類l缺?。嚎杀划?dāng)前包中的其他類訪問labstract:沒有實(shí)例的抽象概念類,是它的所有子類 的公共屬性和公共方法的集合lfinal:不能再被擴(kuò)展,不能有子類的類;易于安全 性的實(shí)現(xiàn),或用于創(chuàng)建固定功能的類l父類繼承聲明:extends 父類名l實(shí)現(xiàn)接口(inter

10、face):implements 接口名Java中類的聲明中類的聲明l例:public abstract class shape class rectangle extends shape final class roundrect extends rectangle 創(chuàng)建對(duì)象創(chuàng)建對(duì)象l對(duì)象(實(shí)例instance):以類為模板創(chuàng)建的 具體實(shí)例(實(shí)際個(gè)體)l創(chuàng)建某個(gè)類的具體對(duì)象(類似變量聲明) 類名 欲創(chuàng)建的對(duì)象名new 類名(參數(shù)表) ; 例如: String s = new String( “Hello!” ) ;類的成員變量的聲明類的成員變量的聲明l聲明成員變量(member)的語(yǔ)法修飾符

11、 數(shù)據(jù)類型 變量名;l引用:對(duì)象名.變量名l修飾符l訪問控制符lpublic:可被所有其他類引用lprivate:僅可被該類自身引用和修改,不能被其他任何類(包括該類的子類)引用,它提供了最高級(jí)別的保護(hù)。成員變量的聲明成員變量的聲明lprotected:該類自身、子類、同一包中的其他類lprivate protected:該類自身、子類 注:private protected僅1.0.2支持, 1.1之后不再支持l缺?。罕景械念恖static:類成員變量,對(duì)所有的實(shí)例一致,引用時(shí)前綴 可使用類名或?qū)ο竺鹟final:數(shù)值不變常量,定義同時(shí)應(yīng)對(duì)其進(jìn)行初始化 類成員變量(靜態(tài)變量)類成員變量(靜

12、態(tài)變量)l靜態(tài)變量為類的各實(shí)例共享的變量。 static 靜態(tài)變量名; l位于類的內(nèi)存區(qū)域中,為該類的各個(gè)對(duì)象共享.l無此限定符的變量是實(shí)例變量。 class ex int i ; static int j ; static final int k=10 ; - l final 常量可同時(shí)定義為static類exjk=10對(duì)象1i : 3對(duì)象2i : 5類成員變量(靜態(tài)變量)類成員變量(靜態(tài)變量)l實(shí)現(xiàn)各實(shí)例之間的通訊 對(duì)于該類的任何一個(gè)對(duì)象訪問該靜態(tài)變量時(shí),取得的都是相同的值l跟蹤創(chuàng)建的實(shí)例數(shù) public class Count private int serial ; /實(shí)例變量 pri

13、vate static int counter = 0 ; /靜態(tài)變量 public Count() counter+; serial = counter ; l靜態(tài)變量類似于某些語(yǔ)言中的全局變量類成員變量(靜態(tài)變量)類成員變量(靜態(tài)變量)l非private 的靜態(tài)變量無須創(chuàng)建實(shí)例就可以從類的外部訪問。 class StaticVar static int x=100 ; public class test public void m() int m = StaticVar.x ; 方法的聲明方法的聲明l定義對(duì)類內(nèi)成員變量(數(shù)據(jù))的操作l方法的聲明語(yǔ)法:修飾符 返回類型 方法名(參數(shù)列表) t

14、hrows 例外名 方法體;l方法是類的動(dòng)態(tài)屬性,標(biāo)志了類所具有的功能和操作類的方法定義規(guī)則類的方法定義規(guī)則l形式參數(shù)是方法從調(diào)用它的環(huán)境輸入的數(shù)據(jù)。l返回值是方法在操作完成后返還給調(diào)用它的環(huán)境的數(shù)據(jù)。l要指定方法返回值類型。如沒有返回值,類型要寫 voidl方法名相同,但參數(shù)不同,是不同的方法。l與類名相同的所有方法都是類的構(gòu)造方法。方法體的定義方法體的定義l在方法中定義的變量稱為局部變量。l其生命周期:執(zhí)行進(jìn)入方法體時(shí)建立,退出方法時(shí)撤消。l局部變量使用之前必須初始化。l在方法體中可以訪問所有的類屬性,可以調(diào)用所有類中定義的方法。l方法可以遞歸調(diào)用。方法的聲明方法的聲明l修飾符(Modif

15、ier):l訪問控制符:public、private、protected、private protectedlstatic:靜態(tài)方法,又稱類方法l使用類名或?qū)ο竺鳛榍熬Y,建議使用類名l在方法體中只能使用static變量和static方法labstract:只有方法頭,而沒有具體的方法體和操作實(shí)現(xiàn)的方法,要在子類中通過重新定義(override)來實(shí)現(xiàn)lfinal:不能被重新定義(override)的方法l訪問控制符是一組起到限定類、域或方法是否可以被程序里的其他部分訪問和調(diào)用的修飾符 。l類訪問控制符l公共類 :public 類名 l一般類(缺省)l一個(gè)類被聲明為公共類,表明它可以被所有的其

16、他類所訪問和引用。程序的其他部分可以創(chuàng)建這個(gè)類的對(duì)象、訪問這個(gè)類的內(nèi)部可見成員變量和調(diào)用它的可見方法l一般類只能被同一包中的類訪問和引用。l定義在同一個(gè)程序中的所有類屬于一個(gè)包。 訪問控制符訪問控制符l一個(gè)類作為整體對(duì)程序的其他部分可見,并不能代表類內(nèi)的所有成員變量和方法也同時(shí)對(duì)程序的其他部分可見,前者只是后者的必要條件 l成員變量和方法的可見性域和方法的訪問限定符域和方法的訪問限定符只限在本類內(nèi)使用。private可被同包中其他類使用???被子類繼承(包括位于不同包中的子類)protected公共變量和公共方法,可被任何類使用。public可被同包中其他類使用。無訪問限定符域和方法的訪問限定

17、符域和方法的訪問限定符l為了使對(duì)象具有良好的封裝性,一般將類的實(shí)例變量設(shè)計(jì)成私有。l為了使其它類或?qū)ο竽軌蛟L問私有實(shí)例變量,本類必須提供訪問私有變量的方法(公共方法)。l按照慣例,讀私有變量的方法取名為get 寫私有變量的方法取名為 set 方法的聲明(續(xù))方法的聲明(續(xù))l返回類型:void、returnl參數(shù)列表:參數(shù)類型可為類類型lthrows:l通告本方法中會(huì)產(chǎn)生的例外(異常)類型,提醒調(diào)用者要對(duì)相應(yīng)的可能例外進(jìn)行處理。當(dāng)執(zhí)行此方法并發(fā)生了例外時(shí),程序會(huì)轉(zhuǎn)入調(diào)用者編制的例外處理程序段。方法的參數(shù)方法的參數(shù)l參數(shù)是值傳遞 對(duì)象的內(nèi)容可以改變,但對(duì)象的引用決不會(huì)改變。l方法的參數(shù)可以與類的

18、成員變量同名,這時(shí),參數(shù)在方法體中將隱藏同名的成員變量。 class circle int x,y, radius ; setCircle (int x , int y , int radius ) 值傳送與地址傳送值傳送與地址傳送ABABAB引用類型值傳送基本類型值傳送地址傳送40 x2F0 x2F方法的說明方法的說明l為Employee類增加打印方法將數(shù)據(jù)和代碼封裝在一個(gè)單一的實(shí)體中。 class Employee String name; int age; float salary ; void print() System.out.println(name + “

19、年齡為: ” + age + “月薪為: ” + salary); /class 對(duì)象方法的含義對(duì)象方法的含義 Employee emp = new Employee( ) ; =“張立” ; emp.age=21; emp.salary = 528.37F ;l一旦對(duì)象被建立并被初始化,就可以調(diào)用該方法打印這個(gè)對(duì)象的數(shù)據(jù)。 emp.print() ;l對(duì)象emp執(zhí)行print 方法操作自己的數(shù)據(jù)。l向?qū)ο蟀l(fā)消息,讓對(duì)象做某件事。this與與superlthis和super是常用來指代子類對(duì)象和父類對(duì)象的關(guān)鍵字。Java系統(tǒng)默認(rèn),每個(gè)類缺省地具有null、this和super三

20、個(gè)域,所以在任意類中都可以不加說明而直接使用它們。lthis表示的是當(dāng)前對(duì)象本身,更確切地說,this代表了當(dāng)前對(duì)象的一個(gè)引用。利用this可以使用當(dāng)前對(duì)象的域,調(diào)用當(dāng)前對(duì)象的方法。lsuper 表示的是當(dāng)前對(duì)象的直接父類對(duì)象,是當(dāng)前對(duì)象的直接父類對(duì)象的引用。方法中使用方法中使用this class Banana void f(int i) . Banana a = new Banana(); b = new Banana(); a.f(1); b.f(2);l方法如何知道是處理哪個(gè)對(duì)象?l編譯做了一些內(nèi)部處理 Banana.f(a,1); Banana.f(b,2); l把一個(gè)隱含的參數(shù)傳給

21、了方法指向被操作對(duì)象的引用。thislthis 只能在方法中使用,表示當(dāng)前對(duì)象,或類的當(dāng)前實(shí)例。lthis 適用于一些特殊的場(chǎng)合。l例: public class MyDate int day, month, year ; public void born() Birthday bd = new Birthday(this) ; Java中的多態(tài)中的多態(tài)l多態(tài): 同一程序中同名的不同方法共存l可以通過子類對(duì)父類方法的覆蓋實(shí)現(xiàn)多態(tài)l可以利用重載(overload)在同一個(gè)類中定義多個(gè)同名的方法l多態(tài)情況下進(jìn)行方法調(diào)用時(shí),如何區(qū)分這些同名的不同方法l不同類中的同名方法:冠以類名以示區(qū)別l同類中的同

22、名方法:用不同的參數(shù)列表(參數(shù)的個(gè)數(shù), 類型, 順序的不同)來區(qū)別同名的不同方法多態(tài)多態(tài)l例:Shapes.javal三個(gè)類Circle、Square、Triangle均有draw( )方法和erase( )方法,但不同類的方法的具體操作其實(shí)并不相同,實(shí)現(xiàn)了多態(tài)。draw()erase()draw()erase()draw()erase()Overloding方法重載方法重載l用同一個(gè)名字來表示不同的方法。這些方法同名的原因,是因?yàn)樗鼈兊淖罱K功能和目的都相同,但由于在完成同一功能時(shí),可能遇到不同的具體情況,所以需要定義含不同的具體內(nèi)容的方法。 l方法名必須相同(是同一類中定義同名方法的情況)。

23、l方法的參數(shù)必須不同(同名不同方法是靠不同形式的參數(shù)列表來區(qū)分,包括形式參數(shù)的個(gè)數(shù)、類型、順序的不同)。l返回類型可以不同,但不是重載的標(biāo)志。l利用“重名”現(xiàn)象提高程序的抽象度和簡(jiǎn)潔性。方法的重載方法的重載l例:(相同類型的工作,不同的參數(shù)) public void println(int i); public void println(float f); public void println(String s); lInteger類 String toString(); static String toString(int i);lDouble 類 String toString(); s

24、tatic String toString(double d);在一個(gè)類中,不可以存在兩個(gè)只有返回值不同的方法 構(gòu)造方法(構(gòu)造方法(constructor)l問題的提出lJava試圖在每個(gè)對(duì)象一誕生時(shí),就給它一確定的狀態(tài),但有時(shí)這種系統(tǒng)的缺省初值不合適;所以在創(chuàng)建一個(gè)新對(duì)象時(shí),需用構(gòu)造方法完成合法的初始化,使類內(nèi)成員的初始化工作不依賴于外界完成。構(gòu)造方法構(gòu)造方法l構(gòu)造方法是一種特殊的成員方法,在創(chuàng)建每個(gè)新的類對(duì)象時(shí)自動(dòng)執(zhí)行,以保證新對(duì)象的各成員有合法、確定的數(shù)值。l構(gòu)造方法的名字就是類的名字。l構(gòu)造方法沒有返回類型。l主要用于完成變量的初始化;另外,一個(gè)類中可以存在多個(gè)構(gòu)造方法(重載),這些構(gòu)

25、造方法之間可以互相調(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ǔ)句。構(gòu)造方法構(gòu)造方法l構(gòu)造方法只能在創(chuàng)建類對(duì)象時(shí)由系統(tǒng)隱含調(diào)用,而不能直接引用;l 類對(duì)象創(chuàng)建時(shí),利用運(yùn)算符 new 在內(nèi)存中開辟專用空間,存放指定的類的實(shí)例(即對(duì)象),這時(shí)會(huì)自動(dòng)執(zhí)行類的構(gòu)造方法,初始化新對(duì)象的成員變量。定義構(gòu)造方法定義構(gòu)造方法 Employee(String n,int a,float s) name = n ; if(a=18 & a Lunch( ) PortableLunch( ) Bread( ) Cheese( ) Lettu

26、ce( ) Sandwich( )抽象與抽象類抽象與抽象類l程序員可以先創(chuàng)建一個(gè)定義共有屬性和方法的一般類,再?gòu)囊话泐惻缮鼍哂刑匦缘男骂?。l抽象類實(shí)際上是所有子類的公共域和公共方法的集合,而每一個(gè)子類則是父類的特殊化,是對(duì)公共域和方法在功能、內(nèi)涵方面的擴(kuò)展和延伸。 類繼承樹類繼承樹Objectclassabstract class classfinal classclassJava單重繼承抽象類與最終類抽象類與最終類labstract 抽象類 沒有具體對(duì)象的概念類 l較高層次的概括l抽象類的作用是讓其他類來繼承它的抽象化的特征。l在程序中不能用抽象類作為模板來創(chuàng)建對(duì)象。lfinal 最終類

27、該類不能有子類 。電話卡類無卡號(hào)類有卡號(hào)類磁卡IC卡校園201卡IP卡200卡方法覆蓋方法覆蓋(overriding)l在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,子類可以把從父類那里繼承來的某個(gè)方法改寫,形成同父類方法同名、解決的問題也相似、但具體實(shí)現(xiàn)和功能卻不盡一致的新方法。l定義與父類完全相同的方法,實(shí)現(xiàn)對(duì)父類方法的覆蓋:l完全相同的方法名l完全相同的參數(shù)列表l完全相同類型的返回值l注意:在滿足上述三個(gè)條件同時(shí),還必須保證:訪問權(quán)限不能縮小,拋出的例外要相同包(包( package)l利用面向?qū)ο蠹夹g(shù)開發(fā)系統(tǒng)時(shí),通常需要定義許多類共同工作,為了更好地管理這些類,JAVA中引入了包的概念。l象文件夾把各種文件

28、組織在一起一樣, JAVA中的包把各種類組織在一起,使得程序功能清楚,結(jié)構(gòu)分明。包(包(package)l在操作系統(tǒng)中,目錄用來組織文件,設(shè)置權(quán)限。lJava利用包來組織相關(guān)的類,并控制訪問權(quán)限。l包是一種松散的類的集合。一般不要求處于同一個(gè)包中的類有明確的相互關(guān)系,如包含、繼承等等。l由于同一包中的類在缺省情況下可以互相訪問,所以為了方便編程和管理,通常把需要在一起工作的類放在一個(gè)包里。 l利用包來管理類,可實(shí)現(xiàn)類的共享與復(fù)用(類庫(kù))。包與目錄包與目錄l一個(gè)包要放在指定目錄下。classpath 指定搜尋包的路徑。l一個(gè)包可以包含若干個(gè)類文件,還可包含若干包。l包名本身又對(duì)應(yīng)一個(gè)目錄(用一個(gè)

29、目錄表示)。l包名可以有層次,以小數(shù)點(diǎn)分割。包名一般全小寫(類名第一個(gè)字母大寫) 。包(包( package)l創(chuàng)建 package package 包名;l每一個(gè)class在編譯的時(shí)候被指定屬于某一特定的package ,用關(guān)鍵字package說明: package srd . math ; /命名要注意唯一性,可使用WWW域名 public class ComplexNumber l如果package未指定,則所有的 class都被組合到一個(gè)未命名的缺省package中,不能被其他包中的類引用lpackage說明必須是非注釋非空行的第一行包(包( package)l創(chuàng)建包就是在當(dāng)前文件夾下

30、創(chuàng)建一個(gè)子文件夾,以便存放包中包含的所有類的.class文件。l上面創(chuàng)建的包語(yǔ)句中的符號(hào)“.”代表了目錄分割符,即這個(gè)語(yǔ)句創(chuàng)建了兩個(gè)文件夾。第一個(gè)是當(dāng)前文件夾下的子文件夾srd ;第二個(gè)是srd下的子文件夾 math ,當(dāng)前包中的所有類就存放在這個(gè)文件夾中。包(包( package)l使用包:使用其他包中的class,需l在引用類之前冠以包名作前綴l用import 語(yǔ)句將此包中的某些或所有class加載入當(dāng)前程序:import srd. math. ComplexNumber;import srd. math. *;l包與文件系統(tǒng)l每個(gè)包對(duì)應(yīng)一個(gè)同名的路徑,此包中所有class編譯生成的.cl

31、ass文件都在此目錄中; 此目錄系統(tǒng)不會(huì)自動(dòng)生成,必須手工創(chuàng)建使用其他包中的類使用其他包中的類limport語(yǔ)句將指定包中的類引入當(dāng)前的程序中,即告訴編譯到哪去找程序中使用的類。l import語(yǔ)句必須出現(xiàn)在所有類定義之前。 例:import java.util.* ; 該語(yǔ)句引入整個(gè)utility 類庫(kù)(標(biāo)準(zhǔn)Java庫(kù)的一部分) 例:import java.util.Vector ; 該語(yǔ)句只引入Vector類,但utility類庫(kù)中的其他類不可用。接口接口l“接口”是抽象類的概念。l接口中的方法都是沒有方法體的抽象方法。l接口中只能定義 static final 屬性 。l接口定義的僅僅是

32、實(shí)現(xiàn)某一特定功能的一組方法的對(duì)外接口和規(guī)范,而并沒有真正地實(shí)現(xiàn)這個(gè)功能。l接口的功能實(shí)現(xiàn)是在“繼承”了這個(gè)接口的各個(gè)類中完成的,由這些類來具體定義接口中所有抽象方法的方法體。l通常把對(duì)接口的“繼承”稱為“實(shí)現(xiàn)”。 接口(接口(interface)l接口是一種特殊的類,是作為一個(gè)整體聲明的抽象方法和常量l方法:抽象、無定義的(不必寫abstract)l常量:隱含為final和static的 l接口定義 public interface 接口名 extends 父接口名列表 / 常量域聲明 public static final 域類型 域名 = 常量值; / 抽象方法聲明 public abst

33、ract 返回值類型 方法名( 參數(shù)列表 ) ; 接口(接口(interface)l使用接口l當(dāng)一個(gè)類聲明 implements 某一 interface 時(shí),必須具體實(shí)現(xiàn)該 interface 中定義的抽象方法,并把此方法定義為public的。l利用接口可實(shí)現(xiàn)多重繼承l(wèi)便于設(shè)計(jì)更合理的類層次,代碼更靈活接口的實(shí)現(xiàn)接口的實(shí)現(xiàn) public class MyApplet extends Applet implements Runnable , MouseListener l一個(gè)類只能有一個(gè)父類,但是它可以同時(shí)實(shí)現(xiàn)若干個(gè)接口。如果把接口理解成特殊的類,那么這個(gè)類利用接口實(shí)際上就獲得了多個(gè)父類,即實(shí)

34、現(xiàn)了多繼承。 linstanceof 運(yùn)算符可用來判斷一個(gè)對(duì)象的類是否實(shí)現(xiàn)了某個(gè)接口。接口的實(shí)現(xiàn)接口的實(shí)現(xiàn)一個(gè)類要實(shí)現(xiàn)接口時(shí),要注意下列問題:l在類的聲明部分,用implements關(guān)鍵字聲明該類將實(shí)現(xiàn)那些接口。 l如果實(shí)現(xiàn)了某個(gè)接口的類不是abstract的抽象類,則在類的定義部分必須實(shí)現(xiàn)指定接口的所有抽象方法必須實(shí)現(xiàn)指定接口的所有抽象方法,即為所有抽象方法定義方法體。l如果實(shí)現(xiàn)了某個(gè)接口的類是abstract的抽象類,則它可以不實(shí)現(xiàn)指定接口的所有抽象方法。接口的實(shí)現(xiàn)接口的實(shí)現(xiàn)l接口的抽象方法的訪問控制符為訪問控制符為public,所以類在實(shí)現(xiàn)方法時(shí),必須顯式地使用顯式地使用public。l

35、實(shí)現(xiàn)接口的類要實(shí)現(xiàn)接口的全部方法。如果不需要某個(gè)方法,也要定義成一個(gè)空方法體的方法。 如: public 方法名() 接口例接口例 interface CalArea double pi = 3.14 ; double cal(double r) ; class a implements CalArea public double cal(double r) return pi * r *r ; 接口中定義的方法簽名接口中定義的方法簽名不加任何的修飾符不加任何的修飾符:因?yàn)橐驗(yàn)楸囟楸囟閜ublic類型類型接口(接口(interface)l例:樂器族譜Music.javaInstrument

36、WindPercussionStringed我們可以使用接口來實(shí)現(xiàn)繼承嗎?interface Instrument / constant: int i =5 ; / static & final / Cannot have method definitions: void play(); / Automatically public String what(); void adjust();class Wind implements Instrument / public cannot be omitted public void play() System.out.println(Wind.play(); public String what() return Wind; /注意adjust() 與adjust();的區(qū)別 public void adjust() 接口的應(yīng)用接口的應(yīng)用l聲明多個(gè)類必須實(shí)現(xiàn)的方法。l利用接口模擬多繼承。l只說明對(duì)象的編程接口,而不揭示實(shí)際的類體。內(nèi)部類

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論