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