内部类相关
-
普通内部类和匿名内部类的构造函数会默认增加一个参数(如内部类有默认无参数的构造函数,实际的构造函数为有一个参数的构造函数),并将外部类的实例作为第一个参数。
- 我的理解:
- 内部类可以使用外部累的成员变量。
- 内部类和外部类编译后/加载后均为两个不同的Class对象。
- 为了能让内部类使用外部类的成员变量,让内部类的构造函数默认将外部类的实例作为第一个参数传递给内部类是一个比较好的办法。
- 扩展,是不是所有内部类都默认增加构造函数。
- 增加默认参数的原因是内部类可以使用外部类的成员变量。
- 普通内部类和匿名内部类都可以使用外部成员变量,所以这两种内部类肯定需要默认扩展构造函数。
- 静态内部类拥有静态的特性,即无法使用非静态的变量,所以,静态内部类不能使用外部类的成员变量,使用静态变量则更无需引用外部类的实例,则静态内部类无需默认扩展构造函数。
- 通过反射可以发现,实际情况和上述推论一致。
- 补充:构造函数的扩展,外部类成员变量的使用均与java的访问限制符无关; 当无需使用外部类的属性或变量时,则构造函数无需扩展。