4

我见过很多关于访问封闭类的私有成员的问题。然而,我的问题恰恰相反。

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

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

4

3 回答 3

2

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

于 2012-07-24T16:31:34.223 回答
0

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

static void b(A someA) {
    String b = someA.outerString;
}
于 2012-07-24T16:35:11.077 回答
0

1.this仅适用于非静态成员,没错.....但是您没有使用 this 外部类的实例。

2.您可以很好地Outer class private member顶级)内部静态类访问。

3. Outer to Inner 和 from Inner to Outer 可以互相访问私有成员..唯一不同的是,non static inner class式引用了 Outer 类,并且static inner class必须使用 Instance 访问。

于 2012-07-24T16:42:18.563 回答