## 外部类 因为外部类一定在包中,所有只有public和default两种状态,前者是其它包中也可见,后者是只有在一个包中可见。前者修饰可以被任何包中的类继承,后者只可被同个包中的类继承。 ## 内部类 | 特性 | 成员内部类 | 静态内部类 | 局部(方法)内部类 | [匿名内部类](匿名内部类.md) | | --------- | ---------------------------- | -------------------- | ---------- | -------------------- | | 定义位置 | 外部类的成员位置 | 外部类的成员位置 | 方法或作用域内 | 方法或作用域内 | | 访问外部类成员 | 可无条件访问所有成员(包括private和static)| 只能访问外部类的static成员 | 可访问外部类的成员 | 可访问外部类的成员 | | 创建对象 | 需要外部类对象 | 不需要外部类对象 | 在方法或作用域内创建 | 在使用时直接创建 | | 访问修饰符 | 可以使用所有访问修饰符 | 可以使用所有访问修饰符 | 不能使用访问修饰符 | 不能使用访问修饰符 | | static修饰符 | 可以使用 | 必须使用 | 不能使用 | 不能使用 | | 构造器 | 可以有构造器 | 可以有构造器 | 可以有构造器 | 没有构造器 | | 主要用途 | 封装逻辑,实现"has-a"关系 | 封装静态逻辑,不需要外部类实例 | 封装局部逻辑 | 实现接口或继承类的快速实现 | | 特殊访问形式 | 外部类.this.成员 | - | - | - | | | | QRootResponse 套多层的情况 | | 比较器的场景,lambda 是其进化版本 |