簡體   English   中英

為什么我可以訪問封閉類引用的私有成員

[英]Why can I access the private members of an enclosing class reference

我已經看到很多關於訪問封閉類的私人成員的問題。 但是,我的問題恰恰相反。

如果我(作為示例),以下代碼:

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您必須使用實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM