2012-07-21 154 views
3

如果我在內部類中聲明一個變量爲private,則該變量對外部類可見。我無法理解這裏的邏輯。難道它不是理想的只能在內部課堂上訪問嗎?爲什麼我們可以從外部類訪問內部類中的變量?

+1

@ wrschneider99我認爲這個問題是不同的,因爲它問*爲什麼*(使其成爲語言設計問題) – 2012-07-21 02:11:13

+0

雅我實際上質疑這裏的設計。我知道它可能訪問內部類變量,但我想弄清楚他們爲什麼會這樣做。 – user1527107 2012-07-21 15:43:52

+0

我想它已經在這裏問過了...請在問之前做一些研究。 http://stackoverflow.com/questions/1801718/why-can-outer-java-classes-access-inner-class-private-members – Scorpion 2012-10-17 04:10:08

回答

0

我認爲答案是主觀的,因爲這個問題基本上似乎在問爲什麼Sun/Oracle的語言設計者決定允許某種行爲。

這就是說,這裏是一個答案,企圖...

首先是一些術語,在類中聲明一個類是嵌套類。內部類是一個非靜態的嵌套類,它必須駐留在外部類的一個實例中。所以內部類是外部類的一部分,在這個意義上,內部類的所有成員都是外部類的成員。

http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

與實例方法和變量,一個內部類與它的封閉類的實例相關聯的並且具有該對象的方法和字段的直接訪問。另外,因爲內部類與一個實例相關聯,所以它不能自己定義任何靜態成員。

另一個想法是,內部類的有效用例排除了允許內部類從外部類中隱藏成員的必要性。也就是說,沒有觀念認爲外部階級不會與內部階級聯繫在一起。

爲什麼要允許private呢?因爲私人成員仍然可以隱藏其他可以訪問內部類實例的類。