内部类可以引用他包含类的成员吗?有没有什么限制?
参考解答
内部类是为了实现“信息隐藏”而引入的,原则上它用来访问外部类的field和方法,无论私有还是公有。具体限制规则如下:
类型 | 外部类field | 外部类静态field | 外部类方法 | 外部类静态方法 | 方法内final局部变量 |
---|---|---|---|---|---|
成员内部类 | √ | √ | √ | √ | - |
静态内部类 | - | √ | - | √ | - |
成员方法内局部内部类和匿名内部类 | √ | √ | √ | √ | √ |
静态方法内局部内部类和匿名内部类 | - | √ | - | √ | √ |
总结 静态的只能访问外部静态的变量或方法,非静态的可以访问外部的所有变量或方法
注意
- 局部内部类和匿名内部类访问方法内局部变量时要求该变量必须为final
- jdk8可以省略final关键字,但该变量的值或引用仍不能被修改跟加了final行为一样。