資源描述:
《Java面向?qū)ο?基礎(chǔ)編):內(nèi)部類》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、內(nèi)部類一.內(nèi)部類的基本定義在類內(nèi)部可以定義方法和成員變量,而且在類內(nèi)部也可以定義另一個(gè)類。如果在類Outer的內(nèi)部再定義7一個(gè)類Inner,此時(shí)列Inner就稱為內(nèi)部類,而類Outer則稱為外部類。內(nèi)部類可聲明成public或private。當(dāng)內(nèi)部類聲明成public或private時(shí),對其訪問的權(quán)限與成員變量和成員方法完全相同。格式如下:標(biāo)識符class外部類的名稱{//外部類的成員標(biāo)識符class內(nèi)部類的名稱{//內(nèi)部類的成員}}【定義內(nèi)部類】classOuter{privateStringinfo="helloworld??!";clas
2、sInner{publicvoidprint(){System.out.println(info);}};publicvoidfun(){newInner().print();}};publicclassInnerClassDemo01{publicstaticvoidmain(Stringargs[]){newOuter().fun();}}運(yùn)行結(jié)果:helloworld?。某绦蜻\(yùn)行結(jié)果中可以清楚地發(fā)現(xiàn),Inner類作為Outer類的內(nèi)部類存在,并且在外部類的fun()方法之中直接實(shí)例化內(nèi)部類的對象并調(diào)用方法print(),但是從以上代碼
3、中可以明顯地發(fā)現(xiàn),內(nèi)部類的存在實(shí)際上已經(jīng)破壞了一個(gè)類的基本結(jié)構(gòu),因?yàn)轭愂怯蓪傩约胺椒ńM成的,所以這是內(nèi)部類的一個(gè)缺點(diǎn),那么內(nèi)部類有什么優(yōu)點(diǎn)呢?如果現(xiàn)在把內(nèi)部類拿到外面,就能發(fā)現(xiàn)其優(yōu)點(diǎn)。代碼如下:【將內(nèi)部類拿到外部】classOuter{privateStringinfo="helloWorld!!!";publicStringgetInfo(){returnthis.info;}publicvoidfun(){newInner(this).print();}}classInner{privateOuterout=null;publicInne
4、r(Outerout){this.out=out;}publicvoidprint(){System.out.println(out.getInfo());}};publicclassInnerClassDemo02{publicstaticvoidmain(Stringargs[]){newOuter().fun();}}運(yùn)行結(jié)果:helloWorld!!!以上程序完成了與內(nèi)部類同樣的功能,但是代碼明顯比之前的更加復(fù)雜,所以內(nèi)部類的唯一好處就是可以方便地訪問外部類中的私有屬性。一.使用static定義內(nèi)部類使用static聲明的內(nèi)部類就變成
5、了外部類,但是用static聲明的內(nèi)部類不能訪問非static的外部類屬性?!臼褂胹tatic聲明內(nèi)部類】classOuter{privatestaticStringinfo="helloWorld!";staticclassInner{publicvoidprint(){System.out.println(info);}};};publicclassInnerClassDemo03{publicstaticvoidmain(Stringargs[]){newOuter.Inner().print();}}運(yùn)行結(jié)果:helloWorld!以
6、上程序?qū)nfo屬性定義成為static類型,這樣程序中就可以通過static聲明的內(nèi)部類直接訪問此static屬性。一.在外部訪問內(nèi)部類一個(gè)內(nèi)部類除了可以通過外部類訪問,也可以直接在其他類中進(jìn)行調(diào)用,調(diào)用的基本格式為:外部類.內(nèi)部類內(nèi)部類對象=外部類實(shí)例.new內(nèi)部類();以上的操作格式中,首先要找到外部類的實(shí)例化對象之后,才可以通過外部類的實(shí)例化對象去實(shí)例化內(nèi)部類的對象。注意:在內(nèi)部類定義之后,生成的class文件是以O(shè)uter$Inner.class的形式存在的,在Java中只要在文件中存在$,則在程序中應(yīng)將其替換為“.”?!驹谕獠吭L問
7、內(nèi)部類】classOuter{privateStringinfo="helloworld!!";classInner{publicvoidprint(){System.out.println(info);}};};publicclassInnerClassDemo04{publicstaticvoidmain(Stringargs[]){Outerout=newOuter();//實(shí)例化外部類對象Outer.Innerin=out.newInner();//實(shí)例化內(nèi)部類對象in.print();//調(diào)用內(nèi)部類的方法}}運(yùn)行結(jié)果:hellowo
8、rld!!二.在方法中定義內(nèi)部類也可以在方法中定義一個(gè)內(nèi)部類,但是在方法中定義的內(nèi)部類不能直接訪問方法中的參數(shù),如果方法中的參數(shù)要想被內(nèi)部類訪問,中無參數(shù)前面必須加