版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第12講內(nèi)部類12.1 成員類12.2 局部內(nèi)部類12.3 匿名內(nèi)部類12.4 靜態(tài)內(nèi)部類12.5 內(nèi)部類的繼承12.6 內(nèi)部類的好處
12.7本講小結(jié)Java中可以把一個類的定義放在另一個類的內(nèi)部,外面的類稱為外圍類,里面的類稱為內(nèi)部類。內(nèi)部類可以與其所在的外圍類進(jìn)行通信。內(nèi)部類可以分成員類、局部內(nèi)部類、匿名內(nèi)部類和靜態(tài)內(nèi)部類(嵌套類),下面就這幾種內(nèi)部類進(jìn)行介紹。12.1成員類
沒有static修飾的內(nèi)部類稱為成員類,成員類的使用與普通類類似。示例代碼如下:publicclassOuterClassOne{ classInnerOne{ privateinti=1; InnerOne(){ System.out.println("InnerOne()"); } publicintgetI(){ returni; } } publicvoidtestInnerClass(){ InnerOneone=newInnerOne(); inta=one.getI(); System.out.println(a); } publicstaticvoidmain(String[]args){ OuterClassOneouter=newOuterClassOne(); outer.testInnerClass(); }}12.1成員類
在外圍類的testInnerClass方法中可以創(chuàng)建成員類的對象,并可以調(diào)用成員類的方法。那么我們可以在外圍類的哪些地方創(chuàng)建其成員類的對象呢?下面的代碼可以回答這個問題:publicclassOuterClassTwo{ InnerOneone=newInnerOne(1); classInnerOne{ InnerOne(inti){ System.out.println(i+":InnerOne"); } } publicvoidOuterMethod1(){ InnerOnetwo=newInnerOne(2); } publicstaticvoidOuterMethod2(){ OuterClassTwoouter1=newOuterClassTwo(); InnerOnethree=outer1.newInnerOne(3); } publicstaticvoidmain(String[]args){ OuterClassTwoouter2=newOuterClassTwo(); outer2.OuterMethod1(); OuterMethod2(); OuterClassTwo.InnerOnefour=outer2.newInnerOne(4); }}12.1成員類
從上面的代碼可以看出,成員類的對象依賴于其外圍類的對象,也就是說,要想創(chuàng)建一個成員類的對象必須先創(chuàng)建一個其外圍類的對象。成員類能夠訪問其外圍類的所有成員,示例代碼如下:publicclassOuterClassThree{publicinti=1;intj=2;protectedintm=3;privateintn=4;staticintk=5;classInnerOne{ publicvoidshow(){ System.out.println("i="+i); System.out.println("j="+j); System.out.println("m="+m); System.out.println("n="+n); System.out.println("k="+k); }} publicstaticvoidmain(String[]args){ newOuterClassThree().newInnerOne().show(); }}12.2局部內(nèi)部類
可以在一個方法內(nèi)或者在一個作用域內(nèi)定義內(nèi)部類,稱為局部內(nèi)部類。下面代碼展示了在一個方法內(nèi)部定義的內(nèi)部類。interfaceMyInterface{ voidprint();}publicclassOuterClassFive{publicMyInterfaceshowInnerClass(){ classInnerOneimplementsMyInterface{ publicvoidprint(){ System.out.println("implementation"); } } returnnewInnerOne();} publicstaticvoidmain(String[]args){ newOuterClassFive().showInnerClass().print(); }}12.2局部內(nèi)部類
下面代碼展示了在任意的作用域內(nèi)嵌入式一個內(nèi)部類:publicclassOuterClassSix{ privateintshowInnerClass(booleanb){ if(b){ classInnerOne{ privateinti=1; publicintgetI(){ returni; } } InnerOneone=newInnerOne(); returnone.getI(); } elsereturn0; } publicstaticvoidmain(String[]args){ booleanb=true; //booleanb=false; inta=newOuterClassSix().showInnerClass(b); System.out.println(a); }}12.3匿名內(nèi)部類
如果一個局部內(nèi)部類沒有名字,那么這個類稱為匿名內(nèi)部類。一個匿名內(nèi)部類要么繼承一個類(或抽象類),要么實現(xiàn)一個接口。示例代碼如下://首先聲明一個類和接口classAClass{ AClass(){ System.out.println("AClasss"); }}interfaceAInterface{ intj=2; voidshow();}12.3匿名內(nèi)部類
publicclassOuterClassSeven{ publicAClassgetObjectOne(){ returnnewAClass(){}; } publicAInterfacegetObjectTwo(){ returnnewAInterface(){ publicvoidshow(){ System.out.println("AInterface"); } }; } publicstaticvoidmain(String[]args){ OuterClassSevenouter=newOuterClassSeven(); outer.getObjectOne(); outer.getObjectTwo().show(); }}12.4靜態(tài)內(nèi)部類
如果不需要內(nèi)部類對象與其外圍類對象之間有聯(lián)系,那么可以將內(nèi)部類聲明為static,這樣的內(nèi)部類稱為嵌套類。嵌套類沒有連接到其外圍類的this引用,它類似于其外圍類的一個static方法。示例代碼如下:publicclassNestedClassOne{ privateinti=1; InnerOneone=newInnerOne(); staticclassInnerOne{ privateintm=2; publicstaticintn=3; publicvoidshow(){ System.out.println("m="+m); System.out.println("n="+n); //System.out.println(i);//非法訪問 } publicstaticintget(){ returnn; } }12.4靜態(tài)內(nèi)部類
//(接上)voidOuterMethodOne(){ InnerOnetwo=newInnerOne(); two.show(); intk=two.get(); } staticvoidOuterMethodTwo(){ InnerOnethree=newInnerOne(); three.show(); three.get(); }publicstaticvoidmain(String[]args){intx=NestedClassOne.InnerOne.get();System.out.println("x="+x);NestedClassOne.OuterMethodTwo();newNestedClassOne().OuterMethodOne(); }}
//從上面的代碼可以看出嵌套類的對象并不依賴于其外圍類的對象,并且不能從嵌套類對象中訪問其外圍類對象的非靜態(tài)成員。12.4靜態(tài)內(nèi)部類
眾所周知,接口中只能放置final的域和抽象方法。但嵌套類是static的,所以可以放在接口中定義,甚至可以實現(xiàn)這個接口,示例代碼如下:publicinterfaceNestedInterface{ inti=1;voidshow();staticclassInnerOneimplementsNestedInterface{ publicvoidshow(){ System.out.println("i="+i); }publicstaticvoidmain(String[]args){ newNestedInterface.InnerOne().show(); }}}12.5內(nèi)部類的繼承
因為內(nèi)部類的對象必須依賴于其外圍類的對象而存在,所以這使對內(nèi)部類的繼承變得復(fù)雜。在繼承一個內(nèi)部類時,其外圍類的對象必須被初始化,所以在子類的構(gòu)造方法中必須傳入父類的外圍類的引用。示例代碼如下:classCar{ classWheel{ Wheel(inti){ System.out.println("Wheel:"+i); } }}publicclassPlaneWheelextendsCar.Wheel{PlaneWheel(Carc,inti){
c.super(i);//可以對比c.newWheel(i);進(jìn)行理解
} publicstaticvoidmain(String[]args){ newPlaneWheel(newCar(),4); }}12.6內(nèi)部類的好處
Java是單繼承的,即一個類只能有一個父類。而接口只實現(xiàn)了部分多繼承的好處,接口和內(nèi)部類使Java中的“多繼承”變得更加完美。示例代碼如下:interfaceOne{}interfaceTwo{}classAimplementsOne,Two{}classBimplementsOne{ classInnerimplementsTwo{}}publicclassMultiInheritOne{staticvoidshowOne(Oneone){}staticvoidshowTwo(Twotwo){} publicstaticvoidmain(String[]args){ Aa=newA(); Bb=newB(); showOn
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 緯編工崗前跨領(lǐng)域知識考核試卷含答案
- 栓皮制品工崗前技術(shù)實操考核試卷含答案
- 珍珠巖焙燒工操作規(guī)程水平考核試卷含答案
- 紋版復(fù)制工達(dá)標(biāo)水平考核試卷含答案
- 信息通信網(wǎng)絡(luò)測量員安全管理模擬考核試卷含答案
- 煤層氣排采工9S考核試卷含答案
- 電線電纜拉制工安全防護(hù)知識考核試卷含答案
- 酒精發(fā)酵工操作測試考核試卷含答案
- 汽車飾件制造工安全宣教水平考核試卷含答案
- 2024年沽源縣事業(yè)單位聯(lián)考招聘考試真題匯編附答案
- 2025購房合同(一次性付款)
- 云南省茶葉出口競爭力分析及提升對策研究
- 銀行情緒與壓力管理課件
- 甲狀腺危象護(hù)理查房要點
- 《無人機飛行安全及法律法規(guī)》第3版全套教學(xué)課件
- 2025內(nèi)蒙古電力集團(tuán)招聘筆試考試筆試歷年參考題庫附帶答案詳解
- 交通警察道路執(zhí)勤執(zhí)法培訓(xùn)課件
- 十五五學(xué)校五年發(fā)展規(guī)劃(2026-2030)
- 洗浴員工協(xié)議書
- GB/T 17642-2025土工合成材料非織造布復(fù)合土工膜
- 清欠歷史舊賬協(xié)議書
評論
0/150
提交評論