2013-08-22 53 views
6

我喜歡使用任何語言的訪問控制,但是我發現在Java中我幾乎從不使用訪問控制(如果有的話)使用package-private訪問控制(或缺乏)。我什麼時候可以在Java中使用package-private?

我知道內部類可以是privateprotected,或package-private,但外類只能是package-privatepublic。爲什麼外部班級可能是package-private而不是protected?限制整個程序包可以看到的類/方法/字段有什麼好處,但不能是子類?

回答

13

我使用package-private類和方法,當我想隱藏來自包外的用戶(和其他類)的實現細節。

例如,如果我有一個接口和一個創建該接口實例的工廠類,我可能會將實現類作爲一個單獨的文件,但將其標記爲package-private,以使其他人無法使用它,也不會混淆JavaDoc(如果javadoc設置爲只顯示公共)。

如果您密封了jar文件,package-private方法也可以幫助限制誰可以訪問這些方法。如果某個方法是公共的或受保護的,則子類仍然可以看到並調用該方法,即使它位於不同的包中。 (非密封瓶子允許任何人在你的包裝中製作課程,以便他們可以訪問包裝專用或受保護的方法)

2

在許多情況下,同一包裝中的同級類具有相同的作者,因此他知道內在方式這些類工作,或者換句話說,他知道這些類的封裝邏輯。因此,他可以確保類之間的包 - 私有訪問遵循被訪問類的封裝邏輯,並且這些訪問不會破壞任何內容。

這些直接訪問通常用於優化和保持較小的源代碼量。

對於爲什麼外層類可能是包私有,但沒有保護的問題部分,我沒有答案。

相關問題