2009-01-21 45 views
6

我意識到這是一個非常基本的問題,但它總是困擾着我。據我所知,如果你在Java中聲明一個私有字段,那麼它在該類之外是不可見的。如果它受到保護,則可用於繼承的類和同一包中的任何內容(如果其中任何一個定義不正確,請糾正我)。Java類成員的訪問級別

這是否意味着不可能聲明只能繼承的類訪問的字段,而不能聲明同一個包中的其他非繼承類?

我明白有辦法解決這個問題,但是有沒有什麼時候你想要這樣的行爲?

很明顯,上述問題適用於方法和領域。

非常感謝。

+0

只是關於詞彙表的評論:你在這裏談論的是*可訪問性*變量(或可見性)。變量的範圍是可以使用變量的代碼的一部分(例如,局部變量的範圍是方法的主體或者其定義的塊)。 – 2009-01-21 14:11:55

+0

非常感謝那個Luc – chillysapien 2009-01-21 15:25:18

回答

3

基本上是:

  • 私人信息,只有通過類訪問。
  • public:可以被任何類訪問。
  • 受保護:可由類,所有繼承類和當前包的類訪問(編輯)
  • 沒有定義範圍:可以被當前包的所有類訪問。

更多信息here

+0

受保護的軟件包訪問,請參閱此處的其他回覆以及鏈接。 – Eek 2009-01-21 11:11:35

2

是的,Java的受保護訪問有點奇怪。我不能立即明白爲什麼它是可取的。就個人而言,字段因爲我不喜歡非專用字段(常量除外),但其他成員也是如此。

.NET根本沒有包/名稱空間訪問可見性的概念,但它有一個替代方案,它是程序集(認爲是「jar文件」 - 不完全相同,但很接近)。坦率地說,我想有命名空間部署單位可見性選項,但它似乎註定要失望...