[英]Subclass of a public nested class is unable to access private members of enclosing class
[英]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'引用不適用。
B
是A
的成員,因此可以訪問A
的private
字段和方法。
在這種情況下,盡管B
是static
,但它使用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.