目录
- Java内部类总结
- [1. 内部类(Inner Class)](#1. 内部类(Inner Class))
- [2. 匿名类(Anonymous Class)](#2. 匿名类(Anonymous Class))
- [3. 静态内部类(Static Nested Class)](#3. 静态内部类(Static Nested Class))
- 共性与差异
Java内部类总结
Java中的内部类(Nested Class)是指定义在另一个类内部的类,使用较少但是需要了解。
1. 内部类(Inner Class)
-
定义方式 :在外部类内部直接定义的类,无static修饰
javaclass Outer { class Inner { ... } }
-
核心特性 :
- 必须依附于外部类实例存在,不能单独创建
- 实例化方式:
Outer.Inner inner = outer.new Inner();
- 持有外部类实例的引用,可通过
Outer.this
访问 - 可直接访问外部类的private字段和方法
-
编译产物 :生成
Outer$Inner.class
文件
2. 匿名类(Anonymous Class)
-
定义方式 :在方法内部直接定义并实例化,无需显式类名
javaRunnable r = new Runnable() { @Override public void run() { ... } };
-
核心特性 :
- 必须在定义时立即实例化
- 可实现接口或继承普通类
- 同样持有外部类实例引用,能访问其private成员
- 适用于仅需一次性使用的简单类
-
编译产物 :生成
Outer$1.class
、Outer$2.class
等文件(按出现顺序编号)
3. 静态内部类(Static Nested Class)
-
定义方式 :用static修饰的内部类
javaclass Outer { static class StaticNested { ... } }
-
核心特性 :
- 独立存在,无需依附外部类实例
- 实例化方式:
Outer.StaticNested sn = new Outer.StaticNested();
- 不能访问外部类的非静态成员,只能访问静态成员
- 拥有外部类private成员的访问权限
-
本质:逻辑上与外部类关联的独立类
共性与差异
类型 | 依附外部类实例 | 访问外部类private成员 | 静态成员访问 |
---|---|---|---|
Inner Class | 是 | 是 | 可访问静态和非静态 |
Anonymous Class | 是 | 是 | 可访问静态和非静态 |
Static Nested Class | 否 | 是 | 仅可访问静态 |
内部类的主要作用是实现类的逻辑聚合,同时保持对外部类私有成员的访问能力,在设计模式和回调机制中应用广泛。