作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
<分区>
我有一个 Outer
类,它有一个 private Inner
类。
在我的 Outer
类方法中,我实例化了 Inner
类,如下所示:
Outer outer = new Outer();
Inner inner = outer.new Inner();
编译器将此代码转换为:
Outer outer = new Outer();
Inner inner = new Inner(outer, null);
使用反射显示 Inner
类具有以下合成构造函数:
private Outer$Inner(Outer)
Outer$Inner(Outer,Outer$Inner)
由于 Inner
类是 private
,编译器将 private
构造函数添加到它,因此没有人可以实例化该类。但显然 Outer
类应该能够实例化它,因此编译器添加了另一个包私有(private)构造函数,后者又调用私有(private)构造函数。此外,由于 package-private 构造函数的名称中包含 $
,因此普通的 Java 代码无法调用它。
问题:为什么要合成一个私有(private)的和一个包私有(private)的构造函数?为什么不只合成包私有(private)构造函数并完成它呢?
我是一名优秀的程序员,十分优秀!