菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
131
0

内部类

原创
05/13 14:22
阅读数 58166

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

为什么需要使用内部类

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

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

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

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

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

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

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

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

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

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

发表评论

0/200
131 点赞
0 评论
收藏
为你推荐 换一批