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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

14、hrows 例外名 方法體;l方法是類的動態(tài)屬性,標志了類所具有的功能和操作類的方法定義規(guī)則類的方法定義規(guī)則l形式參數(shù)是方法從調(diào)用它的環(huán)境輸入的數(shù)據(jù)。l返回值是方法在操作完成后返還給調(diào)用它的環(huán)境的數(shù)據(jù)。l要指定方法返回值類型。如沒有返回值,類型要寫 voidl方法名相同,但參數(shù)不同,是不同的方法。l與類名相同的所有方法都是類的構造方法。方法體的定義方法體的定義l在方法中定義的變量稱為局部變量。l其生命周期:執(zhí)行進入方法體時建立,退出方法時撤消。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:只有方法頭,而沒有具體的方法體和操作實現(xiàn)的方法,要在子類中通過重新定義(override)來實現(xiàn)lfinal:不能被重新定義(override)的方法l訪問控制符是一組起到限定類、域或方法是否可以被程序里的其他部分訪問和調(diào)用的修飾符 。l類訪問控制符l公共類 :public 類名 l一般類(缺省)l一個類被聲明為公共類,表明它可以被所有的其

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

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

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

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

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

21、了方法指向被操作對象的引用。thislthis 只能在方法中使用,表示當前對象,或類的當前實例。lthis 適用于一些特殊的場合。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可以通過子類對父類方法的覆蓋實現(xiàn)多態(tài)l可以利用重載(overload)在同一個類中定義多個同名的方法l多態(tài)情況下進行方法調(diào)用時,如何區(qū)分這些同名的不同方法l不同類中的同名方法:冠以類名以示區(qū)別l同類中的同

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

23、l方法的參數(shù)必須不同(同名不同方法是靠不同形式的參數(shù)列表來區(qū)分,包括形式參數(shù)的個數(shù)、類型、順序的不同)。l返回類型可以不同,但不是重載的標志。l利用“重名”現(xià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);在一個類中,不可以存在兩個只有返回值不同的方法 構造方法(構造方法(constructor)l問題的提出lJava試圖在每個對象一誕生時,就給它一確定的狀態(tài),但有時這種系統(tǒng)的缺省初值不合適;所以在創(chuàng)建一個新對象時,需用構造方法完成合法的初始化,使類內(nèi)成員的初始化工作不依賴于外界完成。構造方法構造方法l構造方法是一種特殊的成員方法,在創(chuàng)建每個新的類對象時自動執(zhí)行,以保證新對象的各成員有合法、確定的數(shù)值。l構造方法的名字就是類的名字。l構造方法沒有返回類型。l主要用于完成變量的初始化;另外,一個類中可以存在多個構造方法(重載),這些構

25、造方法之間可以互相調(diào)用,當一個構造方法調(diào)用另一個構造方法時,要使用關鍵字this,同時這個調(diào)用語句應該是整個構造方法的第一條可執(zhí)行語句。構造方法構造方法l構造方法只能在創(chuàng)建類對象時由系統(tǒng)隱含調(diào)用,而不能直接引用;l 類對象創(chuàng)建時,利用運算符 new 在內(nèi)存中開辟專用空間,存放指定的類的實例(即對象),這時會自動執(zhí)行類的構造方法,初始化新對象的成員變量。定義構造方法定義構造方法 Employee(String n,int a,float s) name = n ; if(a=18 & a Lunch( ) PortableLunch( ) Bread( ) Cheese( ) Lettu

26、ce( ) Sandwich( )抽象與抽象類抽象與抽象類l程序員可以先創(chuàng)建一個定義共有屬性和方法的一般類,再從一般類派生出具有特性的新類。l抽象類實際上是所有子類的公共域和公共方法的集合,而每一個子類則是父類的特殊化,是對公共域和方法在功能、內(nèi)涵方面的擴展和延伸。 類繼承樹類繼承樹Objectclassabstract class classfinal classclassJava單重繼承抽象類與最終類抽象類與最終類labstract 抽象類 沒有具體對象的概念類 l較高層次的概括l抽象類的作用是讓其他類來繼承它的抽象化的特征。l在程序中不能用抽象類作為模板來創(chuàng)建對象。lfinal 最終類

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

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

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

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

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

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

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

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

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

36、WindPercussionStringed我們可以使用接口來實現(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() 接口的應用接口的應用l聲明多個類必須實現(xiàn)的方法。l利用接口模擬多繼承。l只說明對象的編程接口,而不揭示實際的類體。內(nèi)部類

溫馨提示

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

評論

0/150

提交評論