内部类

内部类是定义在另一个类中的类

为什么需要使用内部类

  • 内部类可以对同一个包中的其他类隐藏
  • 内部类方法可以访问定义这个类的作用域中的数据,包括原本私有的数据

内部类原先对于简洁地实现回调非常重要,
不过如今lambda表达式在这方面可以做得更好。
但内部类对于构建代码还是很有用的。

一个内部类方法可以访问自身的数据字段,也可以访问创建它的外围类对象的数据字段。
为此,内部类的对象总有一个隐式引用指向创建它的外部类对象。
这个引用在内部类的定义中是不可见的。

只有内部类可以是私有的,而常规类可以有包可见性/公共可见性

使用外围类引用的正规语法的表达式:外部类名.this

可以采用以下语法编写内部类对象的构造器:outerObject.new InnerClass(construction parameters)

可以这样引用内部类:OuterClass.InnerClass

内部类中声明的所有静态字段都必须是final。并初始化为一个编译时常量。
如果这个字段不是一个常量,就可能不唯一。

内部类不能有static方法。(Java语言规范对这个限制没做解释),所以也可以允许有静态方法,但只能访问外围类的静态字段和方法。

内部类是一个编译器现象,与虚拟机无关。
编译器会把内部类转换为常规的类文件。用\(分隔外部类名与内部类名,而虚拟机对此一无所知。 例如,TalkingClock类内部的TimePrinter类将被转换成类文件TalkingClock\)TimePrinter.class

posted @ 2021-02-01 21:55  张三丰学Java  阅读(56)  评论(0编辑  收藏  举报