内部类不能是静态内部类!
非静态的内部类在编译后会有外部类对象的引用,所以构造这种内部类必须先构造外部对象,再用外部对象构造内部对象。
@Test
public void testNested() {
Clazz obj = new Clazz();
Nested nested = obj.new Nested();
nested.print();
}
class Clazz {
Integer id;
class Nested {
String name;
public void print() {
System.out.println(id);
}
}
}
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/eaf81a4c510fd9f9e9cd683b2d2dd42a2934a48d?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
注意nested对象的this$1成员变量,类型是外部类,对象id和obj的id是相同的(id=49)。