Java 内部类
文章目录

内部类
- 一个事物的内部,还需要一个完整的结构进行描述,而这个结构只为外部服务,这个内部的完整结构叫内部类
- 可以将一个类定义到另一个类内,或一个方法内,里面的是内部类,外面的是外部类
实例内部类
- 如何实例化内部类
- 外部类的成员在内部类中都能直接访问

packagetest2;class outClass{privateint a =3;publicstaticint b =2;class inClass{privateint a =1;// 在运行时确定的// static修饰的调用不需要实例化就能调用,而这个变量在内部类需要实例化内部类才能使用// public static int d = 2;publicstaticfinalint d =3;// 在编译的时候就确定了,是个常量,不依赖于实例化publicint e =2;publicvoidtest(){System.out.println("inClass::test");System.out.println(this.a);// 1System.out.println(a);// 1System.out.println(outClass.this.a);// 3}}publicvoidtest(){ inClass inclass =newinClass();System.out.println(inclass.a);System.out.println(inclass.e);System.out.println("outClass::test");}}publicclass testnbl {publicstaticvoidmain(String[] args){// 实例化内部类 outClass class1 =newoutClass(); outClass.inClass class2 = class1.newinClass(); outClass.inClass class3 =newoutClass().newinClass(); class1.test(); class2.test();}}- 字节码文件
外部类类名$内部类类名.class

静态内部类
- 创建外部类对象的引用
静态内部类不需要有外部类对象的引用

class oclass{privateint a =1;publicstaticint b =2;publicint c =3;staticclass iclass{publicint d =4;publicstaticint e =5;privateint f =6;publicvoidtest(){ oclass Out=newoclass();System.out.println(Out.a);System.out.println(b);System.out.println(Out.c);System.out.println(d);System.out.println(e);System.out.println(f);System.out.println("iclass::test");}}publicvoidtest(){System.out.println("oclass::test");}}publicclass testnbl {publicstaticvoidmain(String[] args){ oclass.iclass a =new oclass.iclass(); a.test();}}匿名内部类
- 你有一个类实现了IA接口,重写了test方法
interfaceIA{voidtest();}publicclass testnbl {publicstaticvoidmain(String[] args){// 第一种方法调用// 匿名内部类对象IA a =newIA(){publicvoidtest(){System.out.println("重写了接口的方法!");}}; a.test();// 第二种方法调用newIA(){publicvoidtest(){System.out.println("重写了接口的方法!");}}.test();}}局部内部类
- 只能在其方法内部使用
- 不能被public和static修饰符修饰
- 很少使用

4. 字节码文件
