本文参与思维科技论文征集,正在阅读的朋友欢迎加入。内部类基本概述当一个类的定义放在另一个类的实体中时,该类称为内部类,该类所在的类称为外部类。类体中可以出现的内容:成员变量、成员方法、结构方法、构造块、静态语句块、静态变量、方法、内部类嵌套类内部类(成员内部类、局部内部类、匿名内部类)static嵌套类语法格式classouterclass类名{classinnerclass类名{innerclassclassbody;}}成员内部类成员内部类定义在另一个类或接口内部类注意事项在创建成员内部类对象之前必须先创建外部类对象不能包含静态变量、静态代码块、静态方法(静态常量除外)外部类可以通过成员内部类的对象调用内部类私有成员内部类是一个独立的类,编译成独立的。父类信息,让多重继承的解决变得完整CaseOuter.java//成员内部类使用publicclassOuter{//外部类privateStringstr="Outerclass的str1";privateStringstr2="Outerclassstr2";/**第一:内部类的名称不能与外部类的名称相同*第二:可以使用final和访问修饰符来修饰*/publicclassInner{//内部类privateStringstr=“内部类str1”;privateStringstr2="内部类的str2";publicvoidshow(){//内部类的成员优先于外部类的成员System.out.println(str);System.out.println(str2);//使用“outerclass.this.member”访问外部类的成员System.out.println(Outer.this.str2);System.out.println(Outer.this.str);}}}测试uter.javaimportInner.demo1.Outer.Inner;publicclassTestOuter{publicstaticvoidmain(String[]args){//如果要创建内部类,需要先创建外部类对象//创建外部类对象Outero=newOuter();//创建内部类Innerinner=o.newInner();inner.show();}}str1ofInnerclassstr2ofOuterclassstr2ofOuterclass局部内部类局部内部类是方法h中定义的内部类或者代码块注意:不能包含静态变量,静态代码块,静态方法只能在定义类的方法或代码块中使用,并且必须在使用前定义才能访问它对于所有方法的局部变量,j局部变量必须是有效常量。它是一个独立的类,编译成一个独立的.class文件。只有抽象和最终修饰才能用于定义静态块或方法。在定义静态块或方法时,只能访问外部类静态。MembercaseOuter.java//局部内部类publicclassOuter{//外部类privateStringstr1="str1inOuterclass";privateStringstr2="str2inOuterclass";//定义一个外部类的方法publicvoidprint(){System.out.println("Outerclass中的打印方法");}static{classInner{}//本地内部类}publicvoidmethod(){//classInner必须在使用前定义{privateStringstr1="内部类中的str1";//内部类成员优先于外部类成员publicvoidvisitOuter(){System.out.println(str1);System.out.println(str2);打印();//直接跳转到外部类方法}}//局部内部类只能在定义它的方法或代码块中使用//只能使用abstract/final修饰,Innerin=newInner();in.visitOuter();}}TestOuter.javapublicclassTestOuter{publicstaticvoidmain(String[]args){Outero=newOuter();o.method();}}Inner类中的str1Outer类中的str2Outer类中的print方法匿名内部类匿名内部类是在直接用接口或父类实例化时创建一个没有名字的内部类语法formatinterface/parentclasstypeReferencename=newinterface/parentclasstype(){重写方法;}注意必须且只能继承一个父类或者实现一个没有class关键字的接口,没有类名是一个特殊的局部内部类只能使用构造函数不能定义一次。匿名类不能是抽象类。优点和功能。匿名内部类可以使代码更加紧凑,简洁,封装性更好。匿名内部类可以灵活的创建匿名内部类,使得多重继承的解决方案更加完善。CaseInterDemo.javapublicinterfaceInterDemo{publicabstractvoidprint();}Outer.javapublicclassOuter{//外部类privateStringstr1="Outerclass中的str1";privateStringstr2="Outerclass中的str2";//匿名内部类InterDemoid=newInterDemo(){privateStringstr1="Anonymousinnerclassstr1";@Overridepublicvoidprint(){System.out.println(str1);系统输出文件rintln(str2);//如果要调用外部类的变量,outerclass.this.variableSystem.out.println(Outer.this.str1);}};publicvoidshow(){id.print();}}TestOuter.javapublicclassTestOuter{publicstaticvoidmain(String[]args){Outero=newOuter();o.show();}}匿名内部类str1inOuterclassstr2inOuterclassstr1staticnesting静态嵌套类定义在另一个类,接口,或者用static关键字修饰的嵌套类中注意不是必须的生成外部类对象生成静态嵌套类对象只能直接访问外部类的静态成员。外部类可以通过静态嵌套类的对象调用内部类的成员来定义静态成员变量或静态成员方法CaseOuter.javapublicclassOuter{//外部类//创建两个成员变量,一个是静态的,一个是非静态的privateStringstr1="外部类str1";privatestaticStringstr2="外部类的str2";//成员方法,staticpublicstaticvoidshow1(){System.out.println("显示外部类的方法");}//staticembeddingNestedclass//只能定义在类的成员位置,不能定义在方法或代码块中publicstaticclassInner{privateStringstr1="嵌套类的str1";//privatestaticStringstr2="嵌套类str2";publicvoidshow(){System.out.println(str2);System.out.println(str1);//不能直接访问非静态静态成员//但是可以直接访问外部类的静态成员show1();}}}TestOuter.javaimportInner.demo4.Outer.Inner;publicclassTestOuter{publicstaticvoidmain(String[]args){//如何创建内部类或静态嵌套类对象//首先创建外部对象类InnerInner=newOuter.Inner();Inner.show();}}外部类的str2嵌套类的str1外部类的show方法是静态嵌套的嵌套类和非静态嵌套类的区别内部类(非静态嵌套类)成员位置静态嵌套类定义位置的.、方法、代码块只能由实例成员、静态常量、外层类方法实例成员、静态成员、静态代码块、构造方法对象的结构体组成创建首先要有一个外部类的对象。它不依赖于外部类实例,可以直接实例化。访问外部类可以直接访问外部类。外部类的所有成员只能直接访问外部类。静态成员
