《16.内部类的基本概念汇总》由会员分享,可在线阅读,更多相关《16.内部类的基本概念汇总(11页珍藏版)》请在金锄头文库上搜索。
1、1、课程名称:内部类的基本概念讲师4ECTRestATI ONOMPUTLCONTENTRUNTIME2、知识点2.1、上次课程的主要知识点代码块的定义2.2、本次预计讲解的知识点1、内部类的基本定义语法;2、使用static定义内部类;3、在方法中定义内部类;3从实际开发来看,真正写到内部类的时候是在很久以后了,短期内如果是自己 编写代码,几乎是见不到内部类出现的。讲解它的目的是第一个为了解释概念,另 外一个就是也是为后期一些复杂的程序做铺垫。3.1、内部类的基本概念类的组成永远都只有两点:成员(Field、方法(Method,但是几乎所有的程序里 面都不会对嵌套的结构有任何的限定,所以内部
2、类指的是在一个类的内部可以继续 嵌套其它他类结构的一种形式代码,并且从理论上来讲可以一直嵌套下去。下面首先来看一下内部类的基本形式。范例:观察内部类代码Outer/妙部类private String HeHo WorldT;InnerW内部类public void prinUH$yLemrou1.prHitln|in1a)7/ ttt Hlo 怦囚窘Ipublic void fun(HInner in =1皿吃心实伙化内部类对誠in.prin(a调用內BB类的方注 Ipublic class leitDemo(public ttttk void mainfStiuip方注(Outer out
3、二 new Outer();cutfunO:)J类本身的核心的组成就应该是属性和方法,但是如果引用了内部类,就相当于 破坏了这样的程序结构。所以内部类所带来最严重的问题就在于程序结构的破坏, 但破坏了那么也应该有一些收益,那么内部类的好处在哪里呢?为了观察出内部内类的好处,那么下面将内部类拿出来,变为两个类。那么清楚了内部类的基本定义之后,实际上现在又会存在有以下几个问题:?在编写代码中一直强调:只要是属性的访问一定要加上” this这个时候由于属性是外部类中的,所以要想操作this那么就必须使用”外部类.this.属性class Outer/外部类private String info =
4、1lHello World!1;class Inner/内部类public void print()System.out.printlnjOuter.thisdnfo);/ tH info 属性内容 public void fun()(Inner in = new Innerf);/实例化内部类对象in,print();/调用内部类的方注?以上代码发现内部类可以方便的访问外部内中的私有属性,同时发现外部类 中的fun(方法里面也占着内部类的对象,那么内部类的私有属性外部类也可以直接 利用对象访问class Outer/外部类private String info = pHello World!
5、:dass Inner/内部类public void prtnt)System.out.prindnfOuter.thrtJnfo):/输出 info 第性内容 )public void fun()Inner In = hew I怦n刨|:吴列化内部类对象ln,prlnt();/调用内囲类的方class Outer蚪部类private String info hHello World!: class Innerpublic static void mainString args/static 方法 Outer out = new Outer。:outfun();内部类与外部类之间的私有属性都是
6、可以进行直接访问的,这一点要比分为两 个类更加的方便。现在发现实例化内部类的对象操作都是在外部类中的fun(方法里完成的。那么果现在不希望通过外部类的方法操作内部类,那么也可以根据以下的语法,直 接在其他类中直接实例化内部类对象。语法结构:public static void main(String args)/static 方 法为了解释其语法,我们看一下程序编译后的结果。现在通过程序执行可以发现,在类中存在有一个” Outer$lnner的程序类。这个就属于Inner类文的件。但是内部类的标准名称应该是外部类.内部类”,只不过”.不可能直接出现在文件中所以java将其进行转换,在文件名称中
7、使用” $”来代替public static void main(String args)/static 方法 Outer out = new Outer-*lefTip|: 砧1血 out print! nCFunQ方艺中;EJL 的燼 Ht 蛮矗 ul juIJ nrw;: * .内 i 月耳方汪IHiblK frUDmv(puWk $Stk void nwln(5trh( ar辭|匚注注意:现在使用的是JDK1.8版本那么这个版本的好处是避免了一些复杂的细节,之所以会避免是为了整体的设计考虑的,而以上的代码,在 JDK1.7时就会出现问题。因为在JDK1.8以前有一 个约定,如果一个方法
8、中定义了内部类,那么这个内部类要想访问方法的参数,或 者是定义的变量,则参数或变量前必须加上final。芯占$ OuterW外那类prfwte StririK teifa -卜*dlo WflrWP:public wridmi tn 叩 H方士 辛:了 杏段ddutMe胡gooo a 方诙中k时黝筈4 Aw内靈芒r方注中定文 publk voM prkit(HSsiHn.ouLpnnilnCOuter 矣中静 inlo 性*Ou(w.thitWo.Systrfli.out.prkitinC fur*)J? r.L:!:的掙 KSvsffenLoutprintln(%nn方法申罷JI脚临时爱 m
9、I -uQ: ntw lnnti(| printfM茯创f匕内邑M对硬曲.用方是 poblk 山沙 TfitDmiopublii tlititwHd nuInffDgF .J.(Outer out ner OutcT);/弓拘 11 Outer 黄对瞰out. ftm( 100k之所以可以不加final 了,主要是因为那个Lamda与方法引用一起出现所造成 的新局面。4、总结1、不要去考虑怎么用,一般的开发很少会用到,但是会使用;2、内部类先看明白它的语法形式;范例:内部类拿出来如E llirtwpri vJJfar lb Had irilA-Uki AemMkwi hi * * ntw科伽i
10、iw 乂 厲代丙 If m *n rrM|) 購出需学晨方名与.hif srt*irat.144-id ti 111dlfn imr.V/AK*plivJW OMhT聲址宣僅竝典第更厲餐対萨ChlVH *Viidii tof(OUHriM wnp-)putAt -n4d prin h -1加ttt诉外.畫申葫也11帽.两卑爭覽屿埔閒巒 起自 fietier 九-S加r 律朗.Kyxi亦fi 边Lpi*曲ifFn.Xtl申帕恤I JiMtah llri-ht(liuhli hljibL jtad! aridJib krg 和【建、U Uc r- J.(Mj4h #ul = mm (Mai |MithM I代码修改完成之后实际上就可以感受到内部类的最大好处,是可以直接进行外部类中私有属性的直接访问