为什么外部类能访问内部类的私有成员?

在学习单例时发现,外部类可以访问内部类的私有成员
如下面代码所示:

//Initialization on Demand Holder

class Singleton {
private Singleton() {
}

private static class HolderClass {
        private final static Singleton instance = new Singleton();
}

public static Singleton getInstance() {
    return HolderClass.instance;
}

public static void main(String args[]) {
    Singleton s1, s2; 
        s1 = Singleton.getInstance();
    s2 = Singleton.getInstance();
    System.out.println(s1==s2);
}

}

内部类能访问外部类成员比较好理解,但为什么外部类能访问内部类的私有成员呢?

在任何情况下,外部类都不能直接访问内部类的成员,必须先获取内部类的引用才行或者如果是静态内部类的话由内部类的类名调用