> 技术文档 > Java 内部类

Java 内部类


文章目录

  • 部类
    • 实例内部类
    • 静态内部类
    • 匿名内部类
    • 局部内部类

Java 内部类

内部类

  1. 一个事物的内部,还需要一个完整的结构进行描述,而这个结构只为外部服务,这个内部的完整结构叫内部类
  2. 可以将一个类定义到另一个类内,或一个方法内,里面的是内部类,外面的是外部类

实例内部类

  1. 如何实例化内部类
  2. 外部类的成员在内部类中都能直接访问

Java 内部类

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

Java 内部类

静态内部类

  1. 静态内部类不需要有外部类对象的引用
    Java 内部类
  2. 创建外部类对象的引用
class oclass{ private int a = 1; public static int b = 2; public int c = 3; static class iclass{ public int d = 4; public static int e = 5; private int f = 6; public void test(){ oclass Out = new oclass(); 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\"); } } public void test(){ System.out.println(\"oclass::test\"); }}public class testnbl { public static void main(String[] args) { oclass.iclass a = new oclass.iclass(); a.test(); }}

匿名内部类

  1. 你有一个类实现了IA接口,重写了test方法
interface IA{ void test();}public class testnbl { public static void main(String[] args) { // 第一种方法调用 // 匿名内部类对象 IA a = new IA(){ public void test(){ System.out.println(\"重写了接口的方法!\"); } }; a.test(); // 第二种方法调用 new IA(){ public void test(){ System.out.println(\"重写了接口的方法!\"); } }.test(); }}

局部内部类

  1. 只能在其方法内部使用
  2. 不能被public和static修饰符修饰
  3. 很少使用

Java 内部类
4. 字节码文件

Java 内部类