Java 基础 内部类
内部类(嵌套类) nested class 目的为外围类enclosing class提供服务。
四种:
- 静态成员类 static member class
- 非静态成员类 nonstatic member class
- 匿名类 anonymous class
- 局部类 local class
以下来自effective java 22
非静态成员类的每个实例 都隐含着与外围类的 一个外围实例enclosing instance 相关联。
在非静态成员类的实例方法内部,可以调用外围实例上的方法或者 利用this获得 外围实例的引用。
如果嵌套类的实例 可以在 外围类的实例之外 独立存在,这个嵌套类就必须是静态成员类。
非静态成员类的一个常见用法 Adapter
Map 接口实现 使用 非静态成员类来实现集合视图 collection view。Map keySet entrySet Values方法返回的。
List Set 通过非静态成员类来实现 迭代器 iterator
如果成员类 不要求访问外围实例,就始终static 修饰,成为静态成员类。 如果省略static修饰符, 则每个实例都将包含一个额外的指向外围对象的引用。
私有静态成员类, 用来代表外围类的一个内部组件。 例子就是Map对象的 key 和 value 需要关联起来,内部有一个 Entry对象,对应Map的每个键值对。
匿名内部类 不能拥有静态成员, 不能实例化,不能继承,实现接口等。
匿名类的常见用法是
- 动态创建函数对象。 function object。
- 创建过程对象 process object
- 静态工厂方法