Java内部类的可见性问题

关于Java的内部类的可见性问题,平时并未太注意。不过使用时,其实还是应该明确一点:就是关于内部类和他的外部类的可见性问题:private这种修饰符并不能阻止外部类直接访问到内部类中的private属性;反之亦然。

这里直接看代码会更清楚一些:

 

public class VisibilityTest {

    private String outerName;

    public String showInnerName(InnerClass innerClass){
        // Notice : innerName in InnerClass is "private"
        // But here can be accessed directly without using any public getter.
        return innerClass.innerName;
    }

    private static class InnerClass{
        private String innerName;
        // Notice : outerName in VisibilityTest is "private"
        // But here can be accessed directly without using any public getter.
        public String showOuterClass(VisibilityTest visibilityTest){
            return visibilityTest.outerName;
        }
    }

}

上面的代码不会有任何编译错误,事实上在Java中也是完全合法的。

关于内部类这种可见性的特点,在内部类访问外部类属性或者在外部类访问内部类属性,都相对来说更方便。

一个典型的应用场景是:在利用内部类实现懒加载方式的单例模式,具体可以参考这里。 

 

你可能感兴趣的:(Effective,Java)