




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第四講 內(nèi) 部 類,-主講: 冉孟廷,Java 程序設(shè)計,主要內(nèi)容,一、內(nèi)部類的概念,二、內(nèi)部類的分類及特性,五、局部內(nèi)部類(方法內(nèi)部類),六、匿名內(nèi)部類,七、小結(jié),八、課程實訓(xùn),四、靜態(tài)(嵌套)內(nèi)部類,三、成員內(nèi)部類,一、 內(nèi)部類的概念,在一個類中定義另外一個類,這個類就叫做內(nèi)部類(inner class)。包含了內(nèi)部類聲明的類就稱為“外部類”。 內(nèi)部類的定義和普通類的定義沒什么區(qū)別,它可以直接訪問和引用它的外部類的所有變量和方法(包括private),就像外部類中的其他非static成員的功能一樣。其主要區(qū)別是,外部類只能聲明為public和default,而內(nèi)部類可以聲明為private
2、和protected。,1、內(nèi)部類的概念,靜態(tài)內(nèi)部類根據(jù)定義可以訪問外部類的保護域和私有域。這樣做既有利也有弊,因為很可能在不經(jīng)意間就破壞了外部類的保護域和私有域,從而違反了它的封裝性,所以請小心對待!,一、 內(nèi)部類的概念,當(dāng)我們建立一個inner class時,其對象就擁有了與外部類對象之間的一種關(guān)系,這是通過一個特殊的this reference形成的,當(dāng)內(nèi)部類的成員方法中訪問某個變量/方法時,如果在該方法和內(nèi)部類中都沒有定義過這個變量,調(diào)用就會被傳遞給內(nèi)部類中保存的那個外部類對象的引用(OuterClass.this),通過那個外部類對象的引用去調(diào)用這個變量。,2、內(nèi)部類與其所在類的關(guān)系
3、(UML表達),一、 內(nèi)部類的概念,3、引用內(nèi)部類,內(nèi)部類最自然的一種應(yīng)用就是聲明只在另一個類的內(nèi)部使用的類,或者聲明與另一個類密切相關(guān)的類。適用于類成員的訪問控制修飾符也適用于內(nèi)部類;也就是說,內(nèi)部類可以具有package、protected、private和public訪問權(quán)限,它們的語義和正常的語義沒有什么不同。然而,修飾符static具有不同的含義。應(yīng)用于內(nèi)部類時,它聲明的類具有與其他類相同的語義,也就是可進行實例化,,一、 內(nèi)部類的概念,并像一個標(biāo)準(zhǔn)類那樣使用。唯一的區(qū)別就是它擁有對外部類的所有靜態(tài)成員的完全訪問權(quán)限。 內(nèi)部類同樣可以被其他地方實例化或作為超類予以繼承,便在使用內(nèi)部類
4、時一定要小心,在滿足相關(guān)規(guī)則(如條件限制、語法約定等)的情況下是可以被正常使用的。,實例,實例,請仔細對照閱讀這幾個關(guān)于內(nèi)部類的例子。,實例,實例,實例,主要內(nèi)容,一、內(nèi)部類的概念,二、內(nèi)部類的分類及特性,五、局部內(nèi)部類(方法內(nèi)部類),六、匿名內(nèi)部類,七、小結(jié),八、課程實訓(xùn),四、靜態(tài)(嵌套)內(nèi)部類,三、成員內(nèi)部類,二、內(nèi)部類的分類及特性,1、分類,按內(nèi)部類定義的方式及位置的不同可以把內(nèi)部類分為四種基本類型,分別是:,(1)成員內(nèi)部類 (2)靜態(tài)嵌套內(nèi)部類 (3)局部內(nèi)部類(方法內(nèi)部類) (4)匿名內(nèi)部類,二、內(nèi)部類的分類及特性,2、特點,所有內(nèi)部類都具有以下共同特性:,(1)、內(nèi)部類仍然是一個
5、獨立的類,在編譯之后內(nèi)部類會被編譯成獨立的.class文件,但是前面冠以外部類的類命和$符號。 (2)、內(nèi)部類不能用普通的方式訪問。內(nèi)部類是外部類的一個成員,因此內(nèi)部類可以自由地訪問外部類的成員變量,無論是否是private的。,注:內(nèi)部類在被繼承時缺省的構(gòu)造器不可用。,實例,主要內(nèi)容,一、內(nèi)部類的概念,二、內(nèi)部類的分類及特性,五、局部內(nèi)部類(方法內(nèi)部類),六、匿名內(nèi)部類,七、小結(jié),八、課程實訓(xùn),四、靜態(tài)(嵌套)內(nèi)部類,三、成員內(nèi)部類,三、成員內(nèi)部類,1、成員內(nèi)部類內(nèi)不允許有任何靜態(tài)聲明,2、能夠訪問成員內(nèi)部類的唯一途徑就是通過外部類的對象,實例,(1)從外部類的非靜態(tài)方法中實例化內(nèi)部類對象,
6、(2)從外部類的靜態(tài)方法中實例化內(nèi)部類對象,(3)內(nèi)部類的this引用,(4)成員內(nèi)部類的修飾符,實例,實例,對比: 在外部類的非靜態(tài)方法中實例化內(nèi)部類對象是普通的new方式:Inner in = new Inner( ); 在外部類的靜態(tài)方法中實例化內(nèi)部類對象,必須先創(chuàng)建外部類對象:Outer.Inner in = new Outer().new Inner( );,普通的類可以用this引用當(dāng)前的對象,內(nèi)部類也是如此。但是假若內(nèi)部類想引用外部類當(dāng)前的對象則要用“外部類名”.this.的形式。,對于普通的類,可用的修飾符有final、abstract、strictfp、public和默認(rèn)的包
7、訪問。 但是成員內(nèi)部類更像一個成員變量和方法。 可用的修飾符有:final、abstract、public、private、protected、strictfp和static。 一旦用static修飾內(nèi)部類,它就變成靜態(tài)內(nèi)部類了。,主要內(nèi)容,一、內(nèi)部類的概念,二、內(nèi)部類的分類及特性,五、局部內(nèi)部類(方法內(nèi)部類),六、匿名內(nèi)部類,七、小結(jié),八、課程實訓(xùn),四、靜態(tài)(嵌套)內(nèi)部類,三、成員內(nèi)部類,四、靜態(tài)(嵌套)內(nèi)部類,實例,嚴(yán)格地講,靜態(tài)嵌套類不屬于內(nèi)部類。因為內(nèi)部類與外部類共享一種特殊關(guān)系,更確切地說是對實例的共享關(guān)系。而靜態(tài)嵌套類則沒有上述關(guān)系。它只是位置在另一個類的內(nèi)部,因此也被稱為頂級嵌套
8、類。 靜態(tài)的含義是該內(nèi)部類可以像其他靜態(tài)成員一樣,沒有外部類對象時,也能夠訪問它。靜態(tài)嵌套類不能訪問外部類的成員和方法。,嵌套類意味著靜態(tài)內(nèi)部類只能訪問外部類的靜態(tài)成員(包括靜態(tài)變量和靜態(tài)方法)。 1. 要創(chuàng)建嵌套類的對象,并不需要其外圍類的對象。 2. 不能從嵌套類的對象中訪問非靜態(tài)的外圍類對象。,主要內(nèi)容,一、內(nèi)部類的概念,二、內(nèi)部類的分類及特性,五、局部內(nèi)部類(方法內(nèi)部類),六、匿名內(nèi)部類,七、小結(jié),八、課程實訓(xùn),四、靜態(tài)(嵌套)內(nèi)部類,三、成員內(nèi)部類,五、局部內(nèi)部類(方法內(nèi)部類),1、局部內(nèi)部類又叫方法內(nèi)部類,就是把類放在方法體里面,形如: class Outer public voi
9、d doSomething( ) class Inner public void seeOuter( ) ,五、局部內(nèi)部類(方法內(nèi)部類),2、特性,(1)方法內(nèi)部類只能在定義該內(nèi)部類的方法內(nèi)實例化,不可以在此方法外對其實例化,(2)方法內(nèi)部類對象不能使用該內(nèi)部類所在方法的非 final 局部變量,實例,(3)方法內(nèi)部類的修飾符 與成員內(nèi)部類不同,方法內(nèi)部類更像一個局部變量,可以用于修飾方法內(nèi)部類的只有final和abstract。,方法體中對于無final修飾的局部變量JVM不會拷貝傳給局部內(nèi)部類。,五、局部內(nèi)部類(方法內(nèi)部類),(4)靜態(tài)方法內(nèi)的方法內(nèi)部類 由于靜態(tài)方法是沒有this引用的,
10、因此在靜態(tài)方法內(nèi)的內(nèi)部類只能訪問外部類的靜態(tài)成員。,主要內(nèi)容,一、內(nèi)部類的概念,二、內(nèi)部類的分類及特性,五、局部內(nèi)部類(方法內(nèi)部類),六、匿名內(nèi)部類,七、小結(jié),八、課程實訓(xùn),四、靜態(tài)(嵌套)內(nèi)部類,三、成員內(nèi)部類,六、匿名內(nèi)部類,顧名思義,沒有名字的內(nèi)部類。表面上看起來它們似乎有名字,但實際那不是它們的名字。按書寫/產(chǎn)生匿名內(nèi)部類的方式不同,可以分為以下四種:,1)、繼承式的匿名內(nèi)部類 2)、接口式的匿名內(nèi)部類 3)、參數(shù)式的匿名內(nèi)部類 4)、返回式的匿名內(nèi)部類,實例,實例,實例,1、匿名內(nèi)部類概念及分類,實例,建立匿名內(nèi)部類的關(guān)鍵點是覆蓋父類的一個或多個方法,而不是創(chuàng)建新的方法。,接口式的匿
11、名內(nèi)部類粗看好像是在實例化一個接口,但事實并非如此,它其實是實現(xiàn)了一個接口的匿名類,而且只能實現(xiàn)一個接口。,六、匿名內(nèi)部類,如果滿足下面的一些條件,使用匿名內(nèi)部類是比較合適的:,2、什么情況下需要使用匿名內(nèi)部類,1)只用到類的一個實例。 2)類在定義后馬上用到。 3)類非常小(SUN推薦是在4行代碼以下) 4)給類命名并不會導(dǎo)致你的代碼更容易被理解。,六、匿名內(nèi)部類,3、使用匿名內(nèi)部類的幾個原則,1)匿名內(nèi)部類不能有構(gòu)造方法。 2)匿名內(nèi)部類不能定義任何靜態(tài)成員、方法和類。 3)匿名內(nèi)部類不能是 public, protected, private, static。 4)只能創(chuàng)建匿名內(nèi)部類的一個實例。 5)一個匿名內(nèi)部類一定是在new的后面,用以隱含實現(xiàn)一個接口或?qū)崿F(xiàn)一個類。 6)因匿名內(nèi)部類為局部內(nèi)部類,所以局部內(nèi)部類的所有限制都對其生效。,主要內(nèi)容,一、內(nèi)部類的概念,二、內(nèi)部類的分類及特性,五、局部內(nèi)部類(方法內(nèi)部類),六、匿名內(nèi)部類,七、小
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高端制造車間租賃及技術(shù)研發(fā)合同
- 老妖消防課件
- 美術(shù)說課課件詳細
- 美術(shù)大師課件介紹
- 關(guān)于生產(chǎn)安全事故應(yīng)急預(yù)案的說法正確的有
- 涉爆粉塵企業(yè)安全檢查表
- 工程項目管理論文安全
- 企業(yè)安全生產(chǎn)的八大主體責(zé)任
- 安全生產(chǎn)百日攻堅戰(zhàn)
- 小店運營教程培訓(xùn)課件
- 2025至2030中國羊毛制品行業(yè)市場發(fā)展現(xiàn)狀及發(fā)展趨勢與投資報告
- 股權(quán)投資項目可行性研究報告
- 2025年高考山東卷物理試題講評及備考策略指導(dǎo)(課件)
- 兒童沙門菌感染診療要點
- 燃氣公司防汛管理制度
- 2025山西華陽新材料科技集團有限公司招聘500人筆試參考題庫附帶答案詳解析集合
- (2025)國家公務(wù)員考試時事政治必考試題庫及答案
- 10kV供配電系統(tǒng)電氣設(shè)備改造 投標(biāo)方案
- JG 121-2000施工升降機齒輪錐鼓形漸進式防墜安全器
- 護士考編制試題及答案
- 2025山西大地環(huán)境投資控股有限公司校園招聘13人筆試參考題庫附帶答案詳解
評論
0/150
提交評論