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にアクセスできます。 この場合、フィールドにアクセスするためにAのインスタンスを使用していますが。Aprivate
BstaticA.outerString

于 2012-07-24T16:31:34.223 に答える
0

1.this非静的メンバーでのみ機能します。そうです.....しかし、外部クラスのインスタンスを使用していません。 this

2.そして、(トップレベルの)内部静的クラスから非常にうまくアクセスできます。Outer class private member

3. OutertoInnerおよびInnertoOuterには、相互のプライベートメンバーにアクセスする機能があります。唯一の違い、Outerクラスへの暗黙の参照がnon static inner classあり、インスタンスを使用してアクセスする必要があることです。static inner class

于 2012-07-24T16:42:18.563 に答える
0

staticクラスのメソッドはprivate、同じクラスインスタンスを介して同じクラスのメンバーにアクセスできます。この動作は、staticクラスでも一貫しています。

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