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

时间:2012-07-24 16:28:13

标签: java static-members nested-class

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

如果我(作为示例),则使用以下代码:

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'引用不适用。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

类的

static方法可以通过同一个类实例访问同一个类的private个成员。此行为也适用于static类。

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

答案 2 :(得分:0)

<强> 1。 this仅适用于非静态成员,这是正确的 .....但您未使用 this 但是外部类的实例

2。您可以非常好地访问 (顶级)内部静态类中的Outer class private member

3。从内到外,从内到外有能够访问彼此的私人成员 .. 唯一差异是其中,non static inner class具有对外类的隐式引用,对于static inner class,您必须使用实例进行访问。