原文出自 http://www.cnblogs.com/ggjucheng/archive/2012/11/28/2793339.html
存取層級修飾符決定了其他類是否可以使用它的特定欄位或調用特定方法,有兩種層級的存取控制:
頂層層級—public,或者包內私人(沒有顯式的修飾符)
成員層級—public,private,protected,或者包內私人(沒有顯式的修飾符)
一個類可以使用public修飾,這個情況,類可以在任何地方被其他類訪問。如果類沒有修飾符(預設,就是包私人),它只能在自己的包內是可見的(包是相關類的一個組,後面會學習的)
在成員層級,你可以使用public修飾符或者是沒有修飾符(包內私人),這個和頂層類層級一樣,表示一樣的含義。對於成員來說,有兩個附加的存取修飾詞:private和protected.private修飾符表示這個成員只能被自己的類訪問,protected修飾符表示,這個成員只能在自己的包內訪問(如包內私人),但是,附加的是,在其它包裡,可以被它的子類訪問。
下面的表格顯示每個修飾符的成員訪問許可
Access Levels
Modifier |
Class |
Package |
Subclass |
World |
public |
Y |
Y |
Y |
Y |
protected |
Y |
Y |
Y |
N |
no modifier |
Y |
Y |
N |
N |
private |
Y |
N |
N |
N |
第一列指示,在該存取層級,類本身是否有許可權訪問成員。正如你看到的,一個類總是可以訪問它的成員。第二列只是在同個包的類(不管是否繼承的關係)是否有許可權訪問成員,第三列指示包外的類是否有許可權訪問該成員。第四列指示全部的類是否有許可權訪問該成員。
存取層級影響你兩個方面。第一,當你使用來自其他來源的類,如Java平台的類,存取層級確定你自己的類可以使用這些類的哪些成員。第二,當你寫一個類,你需要決定每一個成員變數和每個方法應該有什麼樣的存取層級。
讓我們來看看類的集合和存取層級如何影響可見度。在這個例子中顯示四大類,還有它們之間的關係。
說明類和包的存取層級的例子
下面的表顯示了Alpha類的成員在每個存取修飾詞,它們對於其它類是否可見。
Visibility
Modifier |
Alpha |
Beta |
Alphasub |
Gamma |
public |
Y |
Y |
Y |
Y |
protected |
Y |
Y |
Y |
N |
no modifier |
Y |
Y |
N |
N |
private |
Y |
N |
N |
N |
如何選擇存取層級:
如果其他程式員使用你的類,你要確保濫用不會導致發生錯誤,存取層級可以協助你做到這一點。
使用最嚴格的存取層級,對於特定成員來說是合理的。儘可能使用private,除非你有一個很好的理由不用。
除了常量,其他欄位避免public(在本教程中的許多例子中使用public欄位。這可能有助於簡潔的說明,但不建議用於生產代碼。)public欄位往往導致你一個特定的實現,限制你改變你的代碼的靈活性。