- 内部类持有外部类对象的引用
通过查看class文件可以发现,编译器自动添加带有外部类对象引用的构造函数
- 内部类可以访问外部类变量,但是必须是final的
-
内部类可以定义再任何作用域内
-
匿名内部类实例化的时候可以在初始化的时候做一些操作
-
static 修饰的嵌套类,普通内部类不能放在类的外部层次上 不能被static修饰
-
多重嵌套可以访问所有外部变量'
-
内部类继承,必须默认构造方法参数传一个外部类对象,并且调用 enclosingClassReference.super()
-
public class Child extends Outer.Inner{
Child(Outer outer){ outer.super();
} } -
使用局部内部类不使用匿名内部类情况: 重载构造器 需要多个内部类对象
-
java思想
- 内部类设计 可以用来隐藏执行细节,对外隐藏执行细节,外部调用返回接口
- 内部类把逻辑相关的类组织在一起
- 内部类一般都是实现接口,或者继承其他类,所以可以看做事其他类的一个窗口
- 类是单继承的 ,所有内部类算是一种有效实现‘多重继承’的方式
- 可以用多个内部类实现同一个接口
- 一些模板方法,使用内部类来解决一类问题,想 application framework层代码