Java 成员内部类
2026/7/22 0:39:56 网站建设 项目流程

目录

  • 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只有一份

③ 总结

  1. static 修饰的成员变量在类加载的时候就产生了,而内部类需要外部类对象才能创建
  2. 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);}}}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询