版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第5章 接口與內(nèi)部類,在學(xué)習(xí)了類、對象和繼承后,本章學(xué)習(xí)Java中2個較為高級的技術(shù):接口和內(nèi)部類。Java中的接口是Java靈活性的基石,主要用來描述類可以具有什么樣的功能,但并不給出每個功能的具體實現(xiàn)。內(nèi)部類是指在一個外部類的內(nèi)部再定義一個類。內(nèi)部類作為外部類的一個成員,是依附于外部類而存在的。在編寫圖形類接口的時候,內(nèi)部類有助于寫出專業(yè)高效的代碼。,5.1 接口的特性,Java中的接口是一系列方法的聲明,是一些方法特征的集合,一
2、個接口只有方法的特征,沒有方法的實現(xiàn)。因此,這些方法可以在不同的地方被不同的類實現(xiàn),而這些實現(xiàn)可以具有不同的行為或者功能。在Java語言規(guī)范中,一個方法的特征僅包括方法的名字,參數(shù)的數(shù)目和種類,而不包括方法的返回類型,參數(shù)的名字以及拋出的異常。在Java編譯器檢查方法的重載時,會根據(jù)這些條件判斷兩個方法是否是重載關(guān)系。但在Java編譯器檢查方法的置換時,則會進(jìn)一步檢查返回類型和拋出的異常是否相同。,5.2 接口的定義,當(dāng)定義一個接口
3、時,實際上是在編寫一個合約,該合約規(guī)定了用來描述實現(xiàn)該接口的類能夠做什么,能夠充當(dāng)什么樣的角色。而接口中并沒有功能的具體實現(xiàn),具體實現(xiàn)由簽了合約的類自己來完成,但實現(xiàn)時必須滿足接口中的要求。例如,可以編寫一個接口aerocraft,代表飛行器的角色。在該接口中定義了飛行器起飛方法。這樣,具有飛行器功能的所有類都可以實現(xiàn)該接口,并具體實現(xiàn)接口中的方法,不同的類可以有不同的方法實現(xiàn)。聲明接口的基本語法如下。 [abstract] int
4、erface { //方法與成員變量的聲明}例如public interface Helicopter{ public static final int MaxFlyHeight=5400; public abstract void verticalStart();},5.3 接口的使用,在學(xué)習(xí)了如何定義接口后,本節(jié)將詳細(xì)介紹接口的實現(xiàn),包括接口實現(xiàn)的基本語法、接口中方法的實現(xiàn)與使用。,5.3.1 接口實現(xiàn)的
5、基本語法,實現(xiàn)接口時,需要使用關(guān)鍵字implements,該關(guān)鍵字指定該類實現(xiàn)接口,基本語法如下。class implements 接口名列表中可以有多個接口名,因為接口代表的是角色,一個類可以扮演多個角色,下面給出了一個合法的接口實現(xiàn)的代碼片段。1//Employee接口2public interface Employee3{}4//manager接口5public interface Manager6{
6、}7// Person類實現(xiàn)了Employee與Manager接口10public class Person implements Employee, Manager,5.3.2 接口中方法的實現(xiàn)與使用,類的繼承使得開發(fā)人員可以處理同類的事物,但不能處理不同類但具有相同功能的事物。接口能夠被很多不同的類實現(xiàn),但接口中定義的方法僅僅是實現(xiàn)某一特定功能的規(guī)范,而并沒有真正實現(xiàn)這些功能。這些功能都需要在實現(xiàn)該接口的類中完成。例如,
7、直升機(jī)與民航客機(jī)都可以充當(dāng)飛行器(Aerocraft)這個角色,但直升機(jī)與民航客機(jī)沒有任何繼承關(guān)系,但是直升機(jī)與民航客機(jī)通過實現(xiàn)Flyer接口,使得二者都能夠作為飛行器進(jìn)行處理。因為類對接口的實現(xiàn)有上述含義,因此當(dāng)一個類實現(xiàn)了某個接口,其應(yīng)當(dāng)為該接口中的所有方法提供具體實現(xiàn),除非該類為抽象類,,5.4 接口與抽象類,到目前為止,看起來接口與抽象類很像,它們里面都有抽象的方法,都不能實例化。甚至有的讀者會想,既然這么像,只要一種不是更好
8、。但其實它們的含義及其想解決的問題都是截然不同的,本節(jié)將從兩個方面介紹它們之間的區(qū)別。1.語法上的不同見課本P149表5-12.具體含義的不同,5.5 接口與回調(diào),回調(diào)是一種常見的程序設(shè)計模式,利用回調(diào)技術(shù)可以處理這樣的問題,事件A發(fā)生時要執(zhí)行處理事件A的代碼,判斷何時發(fā)生事件A及何時執(zhí)行處理的代碼。這些代碼是固定的,先行編寫完畢,供使用。但事件A的處理代碼開放給其他開發(fā)人員編寫,可以有很多不同的實現(xiàn),使用時可以注冊具體需要的實
9、現(xiàn)來處理。Java中Swing與AWT的事件監(jiān)聽處理模型就是使用接口與回調(diào)實現(xiàn)的,學(xué)習(xí)了第8章內(nèi)容后可以進(jìn)一步體會接口與回調(diào)帶來的好處。在這里舉一個簡單的例子來說明這個問題,,5.6 內(nèi) 部 類,前面章節(jié)已經(jīng)介紹了Java中類或?qū)ο蟮某蓡T,包括方法、成員變量和語句塊。其實類不但有這些類型的成員,也可以作為另一個類的成員。充當(dāng)這種角色的類稱為內(nèi)部類,包含內(nèi)部類的類稱為外部類,使用內(nèi)部類可以完成很多特殊的任務(wù),本節(jié)將介紹與內(nèi)部類有關(guān)
10、的內(nèi)容。,5.6.1 內(nèi)部類概述,內(nèi)部類是指在一個外部類的內(nèi)部再定義一個類。內(nèi)部類作為外部類的一個成員,依附于外部類而存在。內(nèi)部類可為靜態(tài),可用protected和private修飾(而外部類只能使用public和protected的包訪問權(quán)限)。內(nèi)部類主要有以下幾類:成員內(nèi)部類、局部內(nèi)部類、靜態(tài)內(nèi)部類、匿名內(nèi)部類。為什么需要內(nèi)部類?典型的情況是,內(nèi)部類繼承自某個類或?qū)崿F(xiàn)某個接口,內(nèi)部類的代碼創(chuàng)建其外圍類的對象。所以可以認(rèn)為內(nèi)部類提
11、供了某種進(jìn)入其外圍類的窗口。,5.6.2 內(nèi)部類語法規(guī)則,從外面內(nèi)部類看,完全可以將其看成是外部類的一個成員,與普通的成員沒有什么區(qū)別,對普通成員的限制、修飾等都可以加之于非靜態(tài)內(nèi)部類。只是這個成員不再是基本數(shù)據(jù)類型,也不再是對象引用,而是一個類,由一個類來扮演成員的角色。下面給出了定義內(nèi)部類的基本語法。 class { [][static]class { //內(nèi)部類的成員
12、 } //外部類的其他成員},5.6.3 局部內(nèi)部類,在方法內(nèi)定義的內(nèi)部類稱為局部內(nèi)部類。在這種情況下,其作用域與局部變量相同,只在其所在的語句塊中有效。與局部變量類似,局部內(nèi)部類不能有成員的訪問限制修飾符,因為它不是外部類的一部分,但是它可以訪問當(dāng)前代碼塊內(nèi)的常量,和此外部類的所有成員。使用局部內(nèi)部類有如下兩個優(yōu)點。(1)它對外面的所有類來說都是隱藏的,即使是它所屬的外部類,僅有它所在的方法知道它。(2)它不
13、僅可以訪問它所屬外部類中的數(shù)據(jù),還可以訪問局部變量,不過局部變量須聲明為final類型。,5.6.4 匿名內(nèi)部類,匿名內(nèi)部類就是沒有名字的內(nèi)部類。本節(jié)主要介紹關(guān)于匿名內(nèi)部類的內(nèi)容,主要包括基本語法、對象的創(chuàng)建與使用以及匿名內(nèi)部類的具體作用等。匿名內(nèi)部類沒有名稱,因此匿名內(nèi)部類在聲明類的同時也創(chuàng)建了對象。匿名內(nèi)部類的聲明要么是基于繼承的,要么是基于實現(xiàn)接口的。,5.6.5 靜態(tài)內(nèi)部類,當(dāng)內(nèi)部類名前有static關(guān)鍵字時,該內(nèi)部類為靜
14、態(tài)內(nèi)部類。靜態(tài)內(nèi)部類是外部類的靜態(tài)成員,其不依賴于外部類的對象而存在,因此在外部類外面創(chuàng)建靜態(tài)內(nèi)部類對象時不需要首先創(chuàng)建外部類的對象。這點與非靜態(tài)內(nèi)部類是不同的,下面給出了在外部類之外創(chuàng)建靜態(tài)內(nèi)部類對象的基本語法。. 引用變量= new .;,5.6.6 關(guān)于內(nèi)部類的討論,內(nèi)部類實際上就是由一個類扮演了特定的角色。例如,對于成員內(nèi)部類來說,其扮演了成員的角色,局部內(nèi)部類則扮演了局部的角色,而在內(nèi)部類里面則和在其他普通類里面一樣。因
15、此,從內(nèi)部類里面來看,內(nèi)部類就是一個類,而從內(nèi)部類外面來看,內(nèi)部類則是外部類的某種組成部分。這樣用于修飾內(nèi)部類的修飾符也隨其扮演的角色不同而變化,,5.7 小結(jié),本章介紹了Java中的一項重要技術(shù)——接口,以及Java中一種獨特的語法結(jié)構(gòu)——內(nèi)部類。接口是Java中實現(xiàn)多態(tài)與程序靈活性的一項重要手段,學(xué)習(xí)接口進(jìn)一步加深對面向?qū)ο笏枷氲睦斫?,在以后的實際開發(fā)中恰當(dāng)使用接口,以及在恰當(dāng)?shù)膱龊鲜褂貌煌膬?nèi)部類(接口)來滿足開發(fā)的需要,可以簡化
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 一般內(nèi)部類、局部內(nèi)部類和匿名內(nèi)部類
- 實驗三異常類與內(nèi)部類
- 實驗三異常類與內(nèi)部類
- 第14講包和接口(下)
- 第4講 算法與復(fù)數(shù)
- 第4講 分?jǐn)?shù)
- 第7單元 第4講
- 第2單元 第4講
- 第3-4講
- 第4講 員工招聘
- 工程數(shù)學(xué)第4講
- 第3講 免疫球蛋白(第4講)(1)
- 第4講 補(bǔ)體系統(tǒng)(第5講)(1)
- 第4講指數(shù)與對數(shù)函數(shù)
- 第4講 螺紋聯(lián)接與螺旋傳動
- 第11講公司治理——內(nèi)部治理機(jī)制
- 第4講關(guān)系代數(shù)(一)
- 第4講指數(shù)與對數(shù)函數(shù)(學(xué)生)
- 第4講 共邊模型
- 第4講-體育鍛煉與心理健康
評論
0/150
提交評論