java中的内部类可以无条件地使用外部类的资源,这是怎么一回事呀?
在内部类创造时,会自动地拥有一个外部类的引用,这个是编译器给它创建的,当某个外部类的对象要创建一个内部类对象时,此内部类对象会秘密地获得一个指向外围类对象的引用(下面的图会看到的)。当要访问外部类的成员时,就会用这个引用来选择外部的成员,这个是一个很有趣的事情。看下面的例子。
public class A {
private int OuterValue = 12 ;
class InnerClass1{
private int value = 0 ;
public void getValue(){
value = OuterValue ;
}
}
}
看看它被编译后吧
A类:(这里创建了一个static int access$000(A)的静态函数,是为了对内部类服务的。)
A类的内部类(创建了一个final A this$0,这个是编译器自动创建的,在构造方法那里还给它赋值了,那个value要用到外部的值时,这里直接用了类的A.access$000这个静态方法,这里的参数直接用了那个this$0了。)