Java 基礎 第4講(課時2).ppt_第1頁
Java 基礎 第4講(課時2).ppt_第2頁
Java 基礎 第4講(課時2).ppt_第3頁
Java 基礎 第4講(課時2).ppt_第4頁
Java 基礎 第4講(課時2).ppt_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第四講 內 部 類,-主講: 冉孟廷,Java 程序設計,主要內容,一、內部類的概念,二、內部類的分類及特性,五、局部內部類(方法內部類),六、匿名內部類,七、小結,八、課程實訓,四、靜態(tài)(嵌套)內部類,三、成員內部類,一、 內部類的概念,在一個類中定義另外一個類,這個類就叫做內部類(inner class)。包含了內部類聲明的類就稱為“外部類”。 內部類的定義和普通類的定義沒什么區(qū)別,它可以直接訪問和引用它的外部類的所有變量和方法(包括private),就像外部類中的其他非static成員的功能一樣。其主要區(qū)別是,外部類只能聲明為public和default,而內部類可以聲明為private

2、和protected。,1、內部類的概念,靜態(tài)內部類根據(jù)定義可以訪問外部類的保護域和私有域。這樣做既有利也有弊,因為很可能在不經(jīng)意間就破壞了外部類的保護域和私有域,從而違反了它的封裝性,所以請小心對待!,一、 內部類的概念,當我們建立一個inner class時,其對象就擁有了與外部類對象之間的一種關系,這是通過一個特殊的this reference形成的,當內部類的成員方法中訪問某個變量/方法時,如果在該方法和內部類中都沒有定義過這個變量,調用就會被傳遞給內部類中保存的那個外部類對象的引用(OuterClass.this),通過那個外部類對象的引用去調用這個變量。,2、內部類與其所在類的關系

3、(UML表達),一、 內部類的概念,3、引用內部類,內部類最自然的一種應用就是聲明只在另一個類的內部使用的類,或者聲明與另一個類密切相關的類。適用于類成員的訪問控制修飾符也適用于內部類;也就是說,內部類可以具有package、protected、private和public訪問權限,它們的語義和正常的語義沒有什么不同。然而,修飾符static具有不同的含義。應用于內部類時,它聲明的類具有與其他類相同的語義,也就是可進行實例化,,一、 內部類的概念,并像一個標準類那樣使用。唯一的區(qū)別就是它擁有對外部類的所有靜態(tài)成員的完全訪問權限。 內部類同樣可以被其他地方實例化或作為超類予以繼承,便在使用內部類

4、時一定要小心,在滿足相關規(guī)則(如條件限制、語法約定等)的情況下是可以被正常使用的。,實例,實例,請仔細對照閱讀這幾個關于內部類的例子。,實例,實例,實例,主要內容,一、內部類的概念,二、內部類的分類及特性,五、局部內部類(方法內部類),六、匿名內部類,七、小結,八、課程實訓,四、靜態(tài)(嵌套)內部類,三、成員內部類,二、內部類的分類及特性,1、分類,按內部類定義的方式及位置的不同可以把內部類分為四種基本類型,分別是:,(1)成員內部類 (2)靜態(tài)嵌套內部類 (3)局部內部類(方法內部類) (4)匿名內部類,二、內部類的分類及特性,2、特點,所有內部類都具有以下共同特性:,(1)、內部類仍然是一個

5、獨立的類,在編譯之后內部類會被編譯成獨立的.class文件,但是前面冠以外部類的類命和$符號。 (2)、內部類不能用普通的方式訪問。內部類是外部類的一個成員,因此內部類可以自由地訪問外部類的成員變量,無論是否是private的。,注:內部類在被繼承時缺省的構造器不可用。,實例,主要內容,一、內部類的概念,二、內部類的分類及特性,五、局部內部類(方法內部類),六、匿名內部類,七、小結,八、課程實訓,四、靜態(tài)(嵌套)內部類,三、成員內部類,三、成員內部類,1、成員內部類內不允許有任何靜態(tài)聲明,2、能夠訪問成員內部類的唯一途徑就是通過外部類的對象,實例,(1)從外部類的非靜態(tài)方法中實例化內部類對象,

6、(2)從外部類的靜態(tài)方法中實例化內部類對象,(3)內部類的this引用,(4)成員內部類的修飾符,實例,實例,對比: 在外部類的非靜態(tài)方法中實例化內部類對象是普通的new方式:Inner in = new Inner( ); 在外部類的靜態(tài)方法中實例化內部類對象,必須先創(chuàng)建外部類對象:Outer.Inner in = new Outer().new Inner( );,普通的類可以用this引用當前的對象,內部類也是如此。但是假若內部類想引用外部類當前的對象則要用“外部類名”.this.的形式。,對于普通的類,可用的修飾符有final、abstract、strictfp、public和默認的包

7、訪問。 但是成員內部類更像一個成員變量和方法。 可用的修飾符有:final、abstract、public、private、protected、strictfp和static。 一旦用static修飾內部類,它就變成靜態(tài)內部類了。,主要內容,一、內部類的概念,二、內部類的分類及特性,五、局部內部類(方法內部類),六、匿名內部類,七、小結,八、課程實訓,四、靜態(tài)(嵌套)內部類,三、成員內部類,四、靜態(tài)(嵌套)內部類,實例,嚴格地講,靜態(tài)嵌套類不屬于內部類。因為內部類與外部類共享一種特殊關系,更確切地說是對實例的共享關系。而靜態(tài)嵌套類則沒有上述關系。它只是位置在另一個類的內部,因此也被稱為頂級嵌套

8、類。 靜態(tài)的含義是該內部類可以像其他靜態(tài)成員一樣,沒有外部類對象時,也能夠訪問它。靜態(tài)嵌套類不能訪問外部類的成員和方法。,嵌套類意味著靜態(tài)內部類只能訪問外部類的靜態(tài)成員(包括靜態(tài)變量和靜態(tài)方法)。 1. 要創(chuàng)建嵌套類的對象,并不需要其外圍類的對象。 2. 不能從嵌套類的對象中訪問非靜態(tài)的外圍類對象。,主要內容,一、內部類的概念,二、內部類的分類及特性,五、局部內部類(方法內部類),六、匿名內部類,七、小結,八、課程實訓,四、靜態(tài)(嵌套)內部類,三、成員內部類,五、局部內部類(方法內部類),1、局部內部類又叫方法內部類,就是把類放在方法體里面,形如: class Outer public voi

9、d doSomething( ) class Inner public void seeOuter( ) ,五、局部內部類(方法內部類),2、特性,(1)方法內部類只能在定義該內部類的方法內實例化,不可以在此方法外對其實例化,(2)方法內部類對象不能使用該內部類所在方法的非 final 局部變量,實例,(3)方法內部類的修飾符 與成員內部類不同,方法內部類更像一個局部變量,可以用于修飾方法內部類的只有final和abstract。,方法體中對于無final修飾的局部變量JVM不會拷貝傳給局部內部類。,五、局部內部類(方法內部類),(4)靜態(tài)方法內的方法內部類 由于靜態(tài)方法是沒有this引用的,

10、因此在靜態(tài)方法內的內部類只能訪問外部類的靜態(tài)成員。,主要內容,一、內部類的概念,二、內部類的分類及特性,五、局部內部類(方法內部類),六、匿名內部類,七、小結,八、課程實訓,四、靜態(tài)(嵌套)內部類,三、成員內部類,六、匿名內部類,顧名思義,沒有名字的內部類。表面上看起來它們似乎有名字,但實際那不是它們的名字。按書寫/產(chǎn)生匿名內部類的方式不同,可以分為以下四種:,1)、繼承式的匿名內部類 2)、接口式的匿名內部類 3)、參數(shù)式的匿名內部類 4)、返回式的匿名內部類,實例,實例,實例,1、匿名內部類概念及分類,實例,建立匿名內部類的關鍵點是覆蓋父類的一個或多個方法,而不是創(chuàng)建新的方法。,接口式的匿

11、名內部類粗看好像是在實例化一個接口,但事實并非如此,它其實是實現(xiàn)了一個接口的匿名類,而且只能實現(xiàn)一個接口。,六、匿名內部類,如果滿足下面的一些條件,使用匿名內部類是比較合適的:,2、什么情況下需要使用匿名內部類,1)只用到類的一個實例。 2)類在定義后馬上用到。 3)類非常小(SUN推薦是在4行代碼以下) 4)給類命名并不會導致你的代碼更容易被理解。,六、匿名內部類,3、使用匿名內部類的幾個原則,1)匿名內部類不能有構造方法。 2)匿名內部類不能定義任何靜態(tài)成員、方法和類。 3)匿名內部類不能是 public, protected, private, static。 4)只能創(chuàng)建匿名內部類的一個實例。 5)一個匿名內部類一定是在new的后面,用以隱含實現(xiàn)一個接口或實現(xiàn)一個類。 6)因匿名內部類為局部內部類,所以局部內部類的所有限制都對其生效。,主要內容,一、內部類的概念,二、內部類的分類及特性,五、局部內部類(方法內部類),六、匿名內部類,七、小

溫馨提示

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

評論

0/150

提交評論