為什麼內部類的private變數可被外部類直接訪問?

時間 2021-05-05 18:16:40

1樓:夏蟲

* 成員內部類首先是外部類的成員(key),所以可以互相訪問對方的靜態變數和靜態方法(和修飾符無關,修飾符是對其他類而言,對外部類無效)

* 非靜態內部類不能有靜態的東西

* 外部類訪問內部類非靜態的東西需要建立內部類物件,所以非靜態內部類一定要例項化才能訪問

* 非靜態內部類必須依賴外部類物件,所以也可以訪問外部類非靜態變數,方法,即都是執行時(外部類.this.)

* 靜態內部類不依賴外部類物件,所以不可以訪問(引用)外部類非靜態變數,方法,即不能持有外部類的引用,可以看做另乙個外部(頂級)類,靜態內部類的載入和外部類載入無關。靜態內部類在使用的時候才會載入

2樓:帥飛

通過反編譯工具可以看到,jvm 幫你在內部類中為 private 屬性生成了乙個 static 的 acess$000 的方法,外部類之所以可以呼叫內部類的 private,其實是因為隱式的呼叫了 access$000 方法。

3樓:Gavin

沒有必要太多的研究這些邊界問題。程式語言是非常多的,鑽研過於細節沒有意義。而且各個程式語言要會有各種各樣的缺陷。

比如內部類,意義就不是很大。專門用內部類的場景不是很多。如果用,一般也會作為一些資料的載體,或者乾脆就是匿名的,作為介面的實現。這兩種場景一般都是內部去訪問外部的一些熟悉。

java為什麼匿名內部類的引數引用時final?

椒圖 public class InnerClass private int counts 10 public void test new Thread new Runnable private String a counts System.out.println in a.counts retur...

為什麼std bitset內部使用unsigned char陣列?

sjx233 哪個標準庫實現的 std bitset 用 unsigned char 陣列?Clang libc std size t 1 2 GCC libstdc unsigned long 3 MSVC STL std conditional t 4 5 hzcool 兩個bitset的位運算...

老幹部型別的男生是什麼樣子?

訪問宇宙 老實說這個概念在我的腦海裡一直不清晰。高一的時候當班長,被自己班裡的人叫老幹部,幾乎是所有人都這麼認為。到了高二,七選三后重新分班,我還是當班長,可是新同學們不到乙個學期也都覺得我特別的老幹部。根據部分同學所言,我長的就很老幹部。我真是驚了還能這樣的嗎?我就無法理解了,這怎麼就老幹部啦?然...