2015-08-28 46 views
3

早在2004年,當我在RIT參加CS課程的介紹時,我的教授非常努力地強調我們記得加入訪問修飾符。沒有它,默認訪問將是公開的,這是我記得教授說的。也許我的記憶錯了,教授實際上並沒有這樣說,但顯然現在並非如此。我想知道是否曾經有過這種情況,也許Sun在2004年後的某個時候改變了它?Java的默認訪問修飾符曾經是公開的

+1

如果你正在談論接口中的訪問修飾符方法,它仍然是正確的。 – Tunaki

+1

你有很長的記憶:) – ZhongYu

+0

回到甚至進一步[Oak 0.2](https://en.wikipedia.org/wiki/Oak_%28programming_language%29)規範甚至說[以下內容](http:// aioo.be/mirrored/OakSpec0.2.pdf):「默認情況下,一個類中的所有變量和方法(包括構造函數)都是 private。」雖然這已經超過10年了:-)目前的範圍在[本表]中清晰可見(http://stackoverflow.com/a/33627846/276052)。 – aioobe

回答

2

自Java 1.0以來,沒有訪問修飾符的Java類一直是包私有的。

這裏是將JLS 1.0的適用部分中的鏈接:

如果一個類或接口類型聲明爲公共,那麼它可以通過任意的Java代碼可以訪問在其中它是包被訪問聲明。如果一個類或接口類型沒有被聲明爲公共的,那麼它只能從它聲明的包中被訪問。

對於內部類型的成員,它說:參考(類,接口,或陣列) 類型或類型的構造的

甲構件(場或方法)時,纔可訪問如果類型 可訪問並且成員或構造被聲明爲允許 訪問:

  • 如果成員或構造聲明爲public,則允許訪問 。接口的所有成員都是隱式公開的。
  • 否則,如果成員或構造被聲明保護,則 訪問只允許當下列中的一個爲真:

    • 訪問成員或構造從包含在類的包內發生受保護的成員是 宣佈。
    • 訪問發生在聲明受保護成員的類的子類中,並且訪問是正確的,如第6.6.2節中的 所述。
  • 否則,如果成員或構造被聲明 私有的,則只有當它從它被聲明的類 內發生允許訪問。

  • 否則,我們說有默認 訪問權限,只有在聲明類型的 包內的訪問發生時才允許訪問。

這意味着,如果留下,不用修改,一個類的成員/構造是包私有,不公開。接口

成員,雖然是從來沒有超過public其他任何東西,所以將訪問修飾符他們不會改變任何事情(當然,如果你嘗試privateprotected你會得到一個編譯錯誤),所以無論你記得教授說,它不適用於接口。

6

在類上,默認訪問是包私有的。在接口上,成員的默認值是public的,而接口本身的默認值,比如classes,是package-private。

自從Java發佈以來,它一直沒有變化。

+0

@RealSkeptic接口*本身*,true,但對於接口的* members *,默認值是'public'。 – Andreas

+0

@RealSkeptic包括你的評論,這就是爲什麼我澄清它。 :-) – Andreas

+0

@RealSkeptic,Andreas:謝謝,試圖澄清。 –

0

自啓動以來,默認訪問說明符對於類是package-private。從Java docs

如果一個類沒有修飾符(默認值,也被稱爲 包私有),只在其自己的包是可見的(包 被命名爲相關類的羣體 - 你將學習關於他們在 後面的課程。)

在成員級別,您還可以使用公共改性劑或無 修飾符(包私營)剛剛與頂級類,並與 相同的含義。對於成員,還有兩個額外訪問修改器:private和protected。私人修飾符指定 成員只能在其自己的類中訪問。受保護的 修飾符指定該成員只能在其自己的 包中(與包私有一樣)以及另一個包中的 的子類訪問。

相關問題