訪問權限控制的等級,從最大權限到最小權限依次爲:public
、protected
、包訪問權限(沒有關鍵字)和private
。
public
:任何類都可以訪問;protected
:該類的子類及同包的類可以訪問;包訪問權限
:同包的類可以訪問;private
:只有本類的成員可以訪問。
每個編譯單元只能有一個public
類,否則編譯器就會報錯。當編譯一個.java
文件時,在.java
文件中的每個類都會有一個輸出文件,而該輸出文件的名字與.java
文件中的每個類的名稱相同,只是多了一個.class
的後綴名。因此,我們經常會發現只要編譯少量的.java
文件,就會產生大量的.class
文件。
訪問權限修飾符public
、protected
和private
在使用時,是置於類中每個成員的定義之前的,無論它是一個方法還是一個域。如果不提供任何訪問權限修飾符,則意味着它是“包訪問權限”。
如果創建了一個新包,並從另一個包中繼承類,那麼唯一可以訪問的成員就是源包的public
成員。當然,如果在同一個包中繼承類,就可以訪問所有擁有包訪問權限的成員。protected
也提供包訪問權限,也就是說,相同包內的其他類也可以訪問protected
元素。
爲了控制某個類的訪問權限,修飾詞必須出現在關鍵字class
之前。此外,還有一些額外的限制:
- 每個編譯單元(文件)都只能有一個
public
類; public
類的名稱必須完全與含有該編譯單元的文件名相匹配,包括大小寫;- 雖然不是很常用,但編譯單元內完全不帶
public
類也是可能的。
最後,要注意:類既不可以是private
的(這樣會使得除該類之外,其他任何類都不可以訪問它),也不可以是protected
的。事實上,一個內部類可以是private
或者protected
的,但這僅是一個特例。