我在写这篇文章之前,我对Java内部类也不是很清楚,只知道简单的应用。前几天有个朋友问我怎么理解Java内部类,我当时就有点傻了,想了半天也没有说出来,我想,如果让大家来回答这个问题,大家该怎么回答呢?我估计,总有一些人回答不上来的,或者说回答的不够完整。我特意查了查,自己又总结了总结,在这给大家分享一下。 在说之前,我先列出几个问题:
1.外部类(非主类)通过怎样的方式访问内部类?
2.内部类能不能访问主类私有的属性,为什么?
3.内部类能不能继承别的类和接口?
4.内部类能不能是static的?
5.在主类的方法里面可不可以定义内部类?
6.初始化主类的时候是不是也把内部类给初始化了?为什么?
7.怎样写一个匿名的内部类?
我目前想到的就这些,在我给大家陈述之前,希望大家好好想想,再往下看:
第一个问题:外部类是怎样引用内部类的?这个问题,我想,可能有的人就会这样写:
这是内部类:InnerClass.
1publicclassMainClass { 2 3 publicclassInnerClass{ 4 publicString name="name"; 5 6 publicString getName() { 7 returnname; 8 } 9 10 publicvoidsetName(String name) { 11 this.name=name; 12 } 13 } 14} |
以下是引用:
1publicclassCheckClass { 2 publicstaticvoidmain(String[] args) { 3 InnerClass innerClass=newInnerClass(); 4 System.out.println(innerClass.getName()); 5 } 6} |
如果这样写的话,会报编译错误。那么为什么会报错呢?因为在Java的设计中,如果想访问一个类的内部类,你必须通过宿主类去取它,然后,再对它进行操作,Java就是想这样把内部类给封闭起来的,好吧,正确的写法,我给大家贴出来:
以下是内部类的写法:
1publicclassMainClass { 2 publicInnerClass getInnerClass() { 3 returnnewInnerClass(); 4 } 5 6 publicclassInnerClass { 7 publicString name="name"; 8 9 publicString getName() { 10 returnname; 11 } 12 13 publicvoidsetName(String name) { 14 this.name=name; 15 } 16 } 17} |