

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