我们知道,写在类里面的类叫做内部类,内部类为什么能够直接访问外部类的属性和方法呢?
内部类的基础知识可以参见我的上一篇博客:
特殊的方法和类
先看一下代码:
public class Test {
private int a;
public class OutClass{ //定义一个成员内部类
private int b;
}
}
经过编译之后,我们发现生成了两个class文件。内部类OutClass也单独生成了一个字节码文件。
内部类会单独生成一个字节码文件,并且以外部类$内部类名的形式命名。
对内部类进行反编译:
public class Test$OutClass {
private int b;
public Test$OutClass(Test this$0) {
this.this$0 = this$0;
}
}
可以看出,编译器会默认为成员内部类添加了一个隐式的指向外部类对象的引用this$0。虽然我们在定义的内部类的构造器是无参构造器,编译器还是会默认添加一个参数,该参数的类型为指向外部类对象的一个引用。
所以,内部类可以随意的访问外部类中的方法和变量。