内部类访问外部类属性

我们知道内部类可以对外部类的属性进行访问,有没有什么限制呢?
在这里插入图片描述
静态内部类只能访问外部类的静态属性,不能访问非静态属性,为什么?
非静态内部类对象的创建依赖于外部类对象的创建,编译器会在内部定义一个指向外部类对象的引用,同时构造器会接受一个外部类对象为参数,如果内部类有访问外部类私有属性,则会在外部类生成一个静态方法。其编译结果实际上如下:

public class OuterClass {

    private String name = "java";

    public static String access$0(OuterClass outer){
        return outer.name;
    }

}

class InnerClass{

    private OuterClass outer;

    public InnerClass(OuterClass outer) {
        this.outer = outer;
    }

    public String get(){
        return OuterClass.access$0(outer);
    }
    
}

这就是为什么非静态内部类可以访问外部类私有属性静态部内类对象的创建不依赖于外部类对象,自然不会持有一个外部类的引用,更无法访问其实例变量

发布了28 篇原创文章 · 获赞 11 · 访问量 1533

猜你喜欢

转载自blog.csdn.net/weixin_42881755/article/details/100152386