我有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
该类应该能够实例化它,因此编译器添加了另一个包私有构造函数,该构造函数又调用私有构造函数。此外,由于包私有构造函数$
的名称中包含该构造函数,因此普通 Java 代码无法调用它。
问题:为什么要合成一个私有构造函数和一个包私有构造函数?为什么不只合成包私有构造函数并完成它呢?