目录
- 1. 成员内部类
- 2. 获取成员内部类的对象
- 3. 为什么成员内部类中不能存在静态成员( 除final staitic)
- 4. 内部类可以访问外部类的所有成员
内部类:在一个类中定义另一个类,只能为外部类服务。
classOutClass{classInnerClass{}}OutClass——外部类InnerClass——内部类
1. 成员内部类
classOutClass{inta;privateintb;publicstaticintc;publicvoidprint(){System.out.println("OutClass");}classInnerClass{intd;privateinte;publicvoidprint(){System.out.println("InnerClass");}}}2. 获取成员内部类的对象
方法1:
publicstaticvoidmain(String[]args){OutClassout=newOutClass();//把内部类当作外部类的成员OutClass.InnerClassinner=out.newInnerClass();}方法2:
publicstaticvoidmain(String[]args){OutClass.InnerClassinner=newOutClass().newInnerClass();}3. 为什么成员内部类中不能存在静态成员( 除final staitic)
Error❌:
classOutClass{classInnerClass{publicstaticinta;}}原因:
① 先看什么是成员内部类:
成员内部类属于对象,不是属于类。
OutClasso1=newOutClass();OutClasso2=newOutClass();OutClass.InnerClassi1=o1.newInnerClass();OutClass.InnerClassi2=o2.newInnerClass();每个InnerClass对象都依附于某个OutClass对象。
② 再看 static 的特点
static表示属于类,而不是属于对象。
classStudent{staticintcount;}Students1=newStudent();Students2=newStudent();count只有一份
③ 总结
- static 修饰的成员变量在类加载的时候就产生了,而内部类需要外部类对象才能创建。
- static 修饰的成员变量属于类,而内部类依赖外部类对象才能创建内部类对象,内部类属于对象。
以上2点相互矛盾,结论:成员内部类中不能存在静态成员
4. 内部类可以访问外部类的所有成员
classOutClass{inta=10;publicvoidprint(){System.out.println("OutClass");}classInnerClass{inta=20;publicvoidprint(){System.out.println("InnerClass");System.out.println(OutClass.this.a);OutClass.this.print();}}}在不使用
OutClass.this.外部类成员的前提下,如果外部类和内部类的成员变量名字一样,优先使用内部类的成员变量。
classOutClass{inta=10;publicvoidprint(){System.out.println("OutClass");}classInnerClass{inta=20;publicvoidprint(){System.out.println("InnerClass");System.out.println(a);}}}