为什么我可以访问封闭类引用的私有成员?

我看到很多关于访问封闭类的私人成员的问题。 但是,我的问题恰恰相反。

如果我有(例如),下面的代码:

public class A {

   private String outerString = "silly string";

   static class B {
      private final A someA = new A();      

      public void foo() {
         String b = someA.outerString ;
      }
   }
}

我想知道为什么这个编译? 由于我从类A(通过someA.outerString)访问'outerString'实例变量的方式,我会预料到一个错误。 我知道一个内部类可以通过一个隐含的'this'引用直接访问封闭的类成员。 但在这里,B类是静态的,所以'this'参考不适用。


BA的成员,因此可以访问Aprivate领域和方法。
在这种情况下,虽然Bstatic ,但它使用A的实例访问字段A.outerString


一个类的static方法可以通过同一个类实例访问同一个类的private成员。 这种行为对于static类也是一致的。

static void b(A someA) {
    String b = someA.outerString;
}

1. this只是非静态成员的作品,这就是正确的 .....但你不使用 this ,但外部类的实例。

2.你可以非常好地(顶层)内部静态类 访问 Outer class private member

3.外部到内部和从内部到外部有能力访问彼此的私有成员唯一的区别是, non static inner class具有隐式引用外部类 ,而对于static inner class您必须使用实例。

链接地址: http://www.djcxy.com/p/91995.html

上一篇: Why can I access the private members of an enclosing class reference

下一篇: Static nested class has access to private constructor of outer class