資源描述:
《黑馬程序員-java內(nèi)部類總結(jié)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、內(nèi)部類指在一個(gè)外部類的內(nèi)部再定義一個(gè)類。內(nèi)部類可以用成員修飾符修飾,如static>public、friendly^protected和private。而外部頂級(jí)類(即類名和文件名相同的)也只能使用public和friendly。1、成員內(nèi)部類1)成員內(nèi)部類,就是作為外部類的成員,可以直接訪問外部類的所有成員變量和方法,包括private的。因?yàn)閮?nèi)部類中持有一個(gè)外部類的引用,格式:OuterClass.this;2)外部類要訪問內(nèi)部類,必須建立內(nèi)部類對(duì)象。當(dāng)內(nèi)部類定義在外部類的成員位置上,且非私有,可以在外部
2、其他類中直接建立內(nèi)部類對(duì)象。格式:OuterClass」nnerClassin=newOuterClass.newInnerClass();3)注意,成員內(nèi)部類小不能含有靜態(tài)變量和方法。原因請(qǐng)見下面的“嵌套內(nèi)部類”部分。例1:[java]viewplaincopy11.classTestDemo2?{3.publicstaticvoidmain(String[]args)4?{5.Outer.Innerinl=newOuter().newInner();//得到內(nèi)部類的一?種方式6.inl.function(
3、);7.Outer?InneTin2=newOuter().getlnner();8.in2.function();9.}10.}11.classOuter12.{13.privateintx=3;14.classInner15.{16.voidfunction()17.{18?System?out.println("Inner:”+x);//內(nèi)部類町以訪問外部類所冇成員,包括私冇的。19.}20.}21./*在外部類作用范圉Z外得到內(nèi)部類對(duì)象的另一種方式,那就是利用其外部類的方法創(chuàng)建并返回。22.個(gè)人推薦這
4、種方式,尤其當(dāng)內(nèi)部類的構(gòu)造函數(shù)無參數(shù)時(shí)*/23.publicInnergetlnner()24.{19.returnnewInner();20.}19.}輸ill結(jié)果:[java]viewplaincopy1.Inner:32.Inner:32、嵌套內(nèi)部類嵌套內(nèi)部類,就是用static修飾的內(nèi)部類。1)當(dāng)內(nèi)部類被static修飾后,就具備static的特性,只能直接訪問外部類中的static成員。出現(xiàn)了訪問局限。2)在外部其他類,直接訪問static內(nèi)部類中的非靜態(tài)成員的格式:newOuterClass.ln
5、nerClass().function();在外部其他類,直接訪問static內(nèi)部類中的靜態(tài)成員的格式:Outer.Inner.function。;3)當(dāng)內(nèi)部類中定義了靜態(tài)成員,則該內(nèi)部類必須是嵌套類的,而嵌套類中的成員不必都是靜態(tài)的;當(dāng)外部類中的靜態(tài)方法訪問內(nèi)部類時(shí),內(nèi)部類也必須是嵌套類。例2:[java]viewplaincopy1.classTestDemo2.{3.publicstatixvoidmai"(StTing[]args)4?{5.newOuter.Inner().functionl();/
6、/在外部J〔他類,Ji接訪問static內(nèi)部類中的非靜態(tài)成員6.Outer.Inner.function2();//在外部其他類,直接訪問static內(nèi)部類中的靜態(tài)成員7?}8}9.classOuter10.{11.privateintx=3;12.privatestaticinty=4;9.staticclassInnervoidfunctionl()14?{15.17.//System.out.println("Inner.x:n+x);//出錯(cuò),嵌套內(nèi)部類只能訪問外部類中的靜態(tài)成員。18.System.
7、out?println("Inner.y="+y);19.}20.staticvoidfunction2()21.{22.System.out.println(":Enner.static");23.}24.}125.}輸出結(jié)果:[java]viewplaincopy1.Inner.y=42.Inner.static3、局部?jī)?nèi)部類局部?jī)?nèi)部類,是指內(nèi)部類定義在方法和作用域內(nèi)。D局部?jī)?nèi)部類仍可以訪問外部成員;2)內(nèi)部類以及其內(nèi)部成員前面不能加private,static等修飾符。因?yàn)樗鼈兪怯糜谛揎棾蓡T的,而此時(shí)內(nèi)
8、部類已經(jīng)變成了局部變量;3)局部?jī)?nèi)部類只能訪問被final修飾的局部變量。例3:[java]viewplaincopy11.classTestDemo2?{3.publicstaticvoidmain(String[]args)4?{5?Outerout=newOuter();6.out.method(l);7?}8}9.classOuter10.{11.privateintx=3;13.voidm