版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第四講 內(nèi) 部 類,-主講: 冉孟廷,Java 程序設(shè)計(jì),主要內(nèi)容,一、內(nèi)部類的概念,二、內(nèi)部類的分類及特性,五、局部?jī)?nèi)部類(方法內(nèi)部類),六、匿名內(nèi)部類,七、小結(jié),八、課程實(shí)訓(xùn),四、靜態(tài)(嵌套)內(nèi)部類,三、成員內(nèi)部類,一、 內(nèi)部類的概念,在一個(gè)類中定義另外一個(gè)類,這個(gè)類就叫做內(nèi)部類(inner class)。包含了內(nèi)部類聲明的類就稱為“外部類”。 內(nèi)部類的定義和普通類的定義沒(méi)什么區(qū)別,它可以直接訪問(wèn)和引用它的外部類的所有變量和方法(包括private),就像外部類中的其他非static成員的功能一樣。其主要區(qū)別是,外部類只能聲明為public和default,而內(nèi)部類可以聲明為private
2、和protected。,1、內(nèi)部類的概念,靜態(tài)內(nèi)部類根據(jù)定義可以訪問(wèn)外部類的保護(hù)域和私有域。這樣做既有利也有弊,因?yàn)楹芸赡茉诓唤?jīng)意間就破壞了外部類的保護(hù)域和私有域,從而違反了它的封裝性,所以請(qǐng)小心對(duì)待!,一、 內(nèi)部類的概念,當(dāng)我們建立一個(gè)inner class時(shí),其對(duì)象就擁有了與外部類對(duì)象之間的一種關(guān)系,這是通過(guò)一個(gè)特殊的this reference形成的,當(dāng)內(nèi)部類的成員方法中訪問(wèn)某個(gè)變量/方法時(shí),如果在該方法和內(nèi)部類中都沒(méi)有定義過(guò)這個(gè)變量,調(diào)用就會(huì)被傳遞給內(nèi)部類中保存的那個(gè)外部類對(duì)象的引用(OuterClass.this),通過(guò)那個(gè)外部類對(duì)象的引用去調(diào)用這個(gè)變量。,2、內(nèi)部類與其所在類的關(guān)系
3、(UML表達(dá)),一、 內(nèi)部類的概念,3、引用內(nèi)部類,內(nèi)部類最自然的一種應(yīng)用就是聲明只在另一個(gè)類的內(nèi)部使用的類,或者聲明與另一個(gè)類密切相關(guān)的類。適用于類成員的訪問(wèn)控制修飾符也適用于內(nèi)部類;也就是說(shuō),內(nèi)部類可以具有package、protected、private和public訪問(wèn)權(quán)限,它們的語(yǔ)義和正常的語(yǔ)義沒(méi)有什么不同。然而,修飾符static具有不同的含義。應(yīng)用于內(nèi)部類時(shí),它聲明的類具有與其他類相同的語(yǔ)義,也就是可進(jìn)行實(shí)例化,,一、 內(nèi)部類的概念,并像一個(gè)標(biāo)準(zhǔn)類那樣使用。唯一的區(qū)別就是它擁有對(duì)外部類的所有靜態(tài)成員的完全訪問(wèn)權(quán)限。 內(nèi)部類同樣可以被其他地方實(shí)例化或作為超類予以繼承,便在使用內(nèi)部類
4、時(shí)一定要小心,在滿足相關(guān)規(guī)則(如條件限制、語(yǔ)法約定等)的情況下是可以被正常使用的。,實(shí)例,實(shí)例,請(qǐng)仔細(xì)對(duì)照閱讀這幾個(gè)關(guān)于內(nèi)部類的例子。,實(shí)例,實(shí)例,實(shí)例,主要內(nèi)容,一、內(nèi)部類的概念,二、內(nèi)部類的分類及特性,五、局部?jī)?nèi)部類(方法內(nèi)部類),六、匿名內(nèi)部類,七、小結(jié),八、課程實(shí)訓(xùn),四、靜態(tài)(嵌套)內(nèi)部類,三、成員內(nèi)部類,二、內(nèi)部類的分類及特性,1、分類,按內(nèi)部類定義的方式及位置的不同可以把內(nèi)部類分為四種基本類型,分別是:,(1)成員內(nèi)部類 (2)靜態(tài)嵌套內(nèi)部類 (3)局部?jī)?nèi)部類(方法內(nèi)部類) (4)匿名內(nèi)部類,二、內(nèi)部類的分類及特性,2、特點(diǎn),所有內(nèi)部類都具有以下共同特性:,(1)、內(nèi)部類仍然是一個(gè)
5、獨(dú)立的類,在編譯之后內(nèi)部類會(huì)被編譯成獨(dú)立的.class文件,但是前面冠以外部類的類命和$符號(hào)。 (2)、內(nèi)部類不能用普通的方式訪問(wèn)。內(nèi)部類是外部類的一個(gè)成員,因此內(nèi)部類可以自由地訪問(wèn)外部類的成員變量,無(wú)論是否是private的。,注:內(nèi)部類在被繼承時(shí)缺省的構(gòu)造器不可用。,實(shí)例,主要內(nèi)容,一、內(nèi)部類的概念,二、內(nèi)部類的分類及特性,五、局部?jī)?nèi)部類(方法內(nèi)部類),六、匿名內(nèi)部類,七、小結(jié),八、課程實(shí)訓(xùn),四、靜態(tài)(嵌套)內(nèi)部類,三、成員內(nèi)部類,三、成員內(nèi)部類,1、成員內(nèi)部類內(nèi)不允許有任何靜態(tài)聲明,2、能夠訪問(wèn)成員內(nèi)部類的唯一途徑就是通過(guò)外部類的對(duì)象,實(shí)例,(1)從外部類的非靜態(tài)方法中實(shí)例化內(nèi)部類對(duì)象,
6、(2)從外部類的靜態(tài)方法中實(shí)例化內(nèi)部類對(duì)象,(3)內(nèi)部類的this引用,(4)成員內(nèi)部類的修飾符,實(shí)例,實(shí)例,對(duì)比: 在外部類的非靜態(tài)方法中實(shí)例化內(nèi)部類對(duì)象是普通的new方式:Inner in = new Inner( ); 在外部類的靜態(tài)方法中實(shí)例化內(nèi)部類對(duì)象,必須先創(chuàng)建外部類對(duì)象:Outer.Inner in = new Outer().new Inner( );,普通的類可以用this引用當(dāng)前的對(duì)象,內(nèi)部類也是如此。但是假若內(nèi)部類想引用外部類當(dāng)前的對(duì)象則要用“外部類名”.this.的形式。,對(duì)于普通的類,可用的修飾符有final、abstract、strictfp、public和默認(rèn)的包
7、訪問(wèn)。 但是成員內(nèi)部類更像一個(gè)成員變量和方法。 可用的修飾符有:final、abstract、public、private、protected、strictfp和static。 一旦用static修飾內(nèi)部類,它就變成靜態(tài)內(nèi)部類了。,主要內(nèi)容,一、內(nèi)部類的概念,二、內(nèi)部類的分類及特性,五、局部?jī)?nèi)部類(方法內(nèi)部類),六、匿名內(nèi)部類,七、小結(jié),八、課程實(shí)訓(xùn),四、靜態(tài)(嵌套)內(nèi)部類,三、成員內(nèi)部類,四、靜態(tài)(嵌套)內(nèi)部類,實(shí)例,嚴(yán)格地講,靜態(tài)嵌套類不屬于內(nèi)部類。因?yàn)閮?nèi)部類與外部類共享一種特殊關(guān)系,更確切地說(shuō)是對(duì)實(shí)例的共享關(guān)系。而靜態(tài)嵌套類則沒(méi)有上述關(guān)系。它只是位置在另一個(gè)類的內(nèi)部,因此也被稱為頂級(jí)嵌套
8、類。 靜態(tài)的含義是該內(nèi)部類可以像其他靜態(tài)成員一樣,沒(méi)有外部類對(duì)象時(shí),也能夠訪問(wèn)它。靜態(tài)嵌套類不能訪問(wèn)外部類的成員和方法。,嵌套類意味著靜態(tài)內(nèi)部類只能訪問(wèn)外部類的靜態(tài)成員(包括靜態(tài)變量和靜態(tài)方法)。 1. 要?jiǎng)?chuàng)建嵌套類的對(duì)象,并不需要其外圍類的對(duì)象。 2. 不能從嵌套類的對(duì)象中訪問(wèn)非靜態(tài)的外圍類對(duì)象。,主要內(nèi)容,一、內(nèi)部類的概念,二、內(nèi)部類的分類及特性,五、局部?jī)?nèi)部類(方法內(nèi)部類),六、匿名內(nèi)部類,七、小結(jié),八、課程實(shí)訓(xùn),四、靜態(tài)(嵌套)內(nèi)部類,三、成員內(nèi)部類,五、局部?jī)?nèi)部類(方法內(nèi)部類),1、局部?jī)?nèi)部類又叫方法內(nèi)部類,就是把類放在方法體里面,形如: class Outer public voi
9、d doSomething( ) class Inner public void seeOuter( ) ,五、局部?jī)?nèi)部類(方法內(nèi)部類),2、特性,(1)方法內(nèi)部類只能在定義該內(nèi)部類的方法內(nèi)實(shí)例化,不可以在此方法外對(duì)其實(shí)例化,(2)方法內(nèi)部類對(duì)象不能使用該內(nèi)部類所在方法的非 final 局部變量,實(shí)例,(3)方法內(nèi)部類的修飾符 與成員內(nèi)部類不同,方法內(nèi)部類更像一個(gè)局部變量,可以用于修飾方法內(nèi)部類的只有final和abstract。,方法體中對(duì)于無(wú)final修飾的局部變量JVM不會(huì)拷貝傳給局部?jī)?nèi)部類。,五、局部?jī)?nèi)部類(方法內(nèi)部類),(4)靜態(tài)方法內(nèi)的方法內(nèi)部類 由于靜態(tài)方法是沒(méi)有this引用的,
10、因此在靜態(tài)方法內(nèi)的內(nèi)部類只能訪問(wèn)外部類的靜態(tài)成員。,主要內(nèi)容,一、內(nèi)部類的概念,二、內(nèi)部類的分類及特性,五、局部?jī)?nèi)部類(方法內(nèi)部類),六、匿名內(nèi)部類,七、小結(jié),八、課程實(shí)訓(xùn),四、靜態(tài)(嵌套)內(nèi)部類,三、成員內(nèi)部類,六、匿名內(nèi)部類,顧名思義,沒(méi)有名字的內(nèi)部類。表面上看起來(lái)它們似乎有名字,但實(shí)際那不是它們的名字。按書(shū)寫/產(chǎn)生匿名內(nèi)部類的方式不同,可以分為以下四種:,1)、繼承式的匿名內(nèi)部類 2)、接口式的匿名內(nèi)部類 3)、參數(shù)式的匿名內(nèi)部類 4)、返回式的匿名內(nèi)部類,實(shí)例,實(shí)例,實(shí)例,1、匿名內(nèi)部類概念及分類,實(shí)例,建立匿名內(nèi)部類的關(guān)鍵點(diǎn)是覆蓋父類的一個(gè)或多個(gè)方法,而不是創(chuàng)建新的方法。,接口式的匿
11、名內(nèi)部類粗看好像是在實(shí)例化一個(gè)接口,但事實(shí)并非如此,它其實(shí)是實(shí)現(xiàn)了一個(gè)接口的匿名類,而且只能實(shí)現(xiàn)一個(gè)接口。,六、匿名內(nèi)部類,如果滿足下面的一些條件,使用匿名內(nèi)部類是比較合適的:,2、什么情況下需要使用匿名內(nèi)部類,1)只用到類的一個(gè)實(shí)例。 2)類在定義后馬上用到。 3)類非常小(SUN推薦是在4行代碼以下) 4)給類命名并不會(huì)導(dǎo)致你的代碼更容易被理解。,六、匿名內(nèi)部類,3、使用匿名內(nèi)部類的幾個(gè)原則,1)匿名內(nèi)部類不能有構(gòu)造方法。 2)匿名內(nèi)部類不能定義任何靜態(tài)成員、方法和類。 3)匿名內(nèi)部類不能是 public, protected, private, static。 4)只能創(chuàng)建匿名內(nèi)部類的一個(gè)實(shí)例。 5)一個(gè)匿名內(nèi)部類一定是在new的后面,用以隱含實(shí)現(xiàn)一個(gè)接口或?qū)崿F(xiàn)一個(gè)類。 6)因匿名內(nèi)部類為局部?jī)?nèi)部類,所以局部?jī)?nèi)部類的所有限制都對(duì)其生效。,主要內(nèi)容,一、內(nèi)部類的概念,二、內(nèi)部類的分類及特性,五、局部?jī)?nèi)部類(方法內(nèi)部類),六、匿名內(nèi)部類,七、小
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年西安鐵路職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性考試模擬測(cè)試卷及答案1套
- 鋼結(jié)構(gòu)施工模擬方案
- 消防設(shè)備故障排查流程
- 噪音控制與植物配置
- 燃?xì)夤こ淌┕みM(jìn)度管理方案
- 基礎(chǔ)抗震設(shè)計(jì)原則
- 漂亮課件作品介紹
- 高風(fēng)險(xiǎn)診療技術(shù)
- 滾動(dòng)知識(shí)問(wèn)答
- 2025 小學(xué)六年級(jí)數(shù)學(xué)上冊(cè)圓的項(xiàng)目式學(xué)習(xí)課件
- 生產(chǎn)線操作員技能培訓(xùn)規(guī)范手冊(cè)
- 林草監(jiān)測(cè)與保護(hù):空天地一體化體系構(gòu)建方案
- 2025浙江紹興越城黃酒小鎮(zhèn)旅游開(kāi)發(fā)有限公司編外人員第二次招聘總筆試歷年典型考點(diǎn)題庫(kù)附帶答案詳解2套試卷
- DB54∕T 0378-2024 牦牛短期育肥技術(shù)規(guī)范
- 2025 年中國(guó)裝配式裝修產(chǎn)業(yè)發(fā)展研究報(bào)告
- 戶外拓展活動(dòng)中中級(jí)攀巖指導(dǎo)員職責(zé)分工計(jì)劃
- 數(shù)據(jù)中心配電知識(shí)培訓(xùn)課件
- 數(shù)據(jù)標(biāo)注員專業(yè)技能考核試卷及答案
- 傳染病信息報(bào)告管理規(guī)范2025版
- 海南自貿(mào)港課件
- 北京市東城區(qū)2026屆數(shù)學(xué)九上期末考試試題含解析
評(píng)論
0/150
提交評(píng)論