Java訪問許可權控制簡述
阿新 • • 發佈:2019-01-26
四種訪問許可權
Java中類與成員的訪問許可權共有四種,其中三種有訪問許可權修飾詞:public
,protected
,private
,。
- Public:許可權最大,允許所有類訪問,但其他包下的類想要訪問需使用
import
關鍵字將這些public類匯入包中才可使用,換句話說,import
將不同包的類匯入到一個包下,從而轉化為包訪問許可權下的情況。 - Protected:除了提供包訪問許可權以外,還對繼承該類的所有派生類賦予訪問許可權。
- Private:許可權最小,只能由包含該成員(域和方法)的類本身訪問,其他任何類都無法訪問。
不使用這三個關鍵詞時,則提供預設包訪問許可權,該許可權只允許同一個包下(即同一個目錄下的Java檔案)的類訪問該類。
注意:private和protected只能修飾成員,無法修飾類。類要麼是public的,要麼是包訪問許可權。
成員最終訪問許可權
- 類訪問許可權大小:
public
>包訪問許可權
。 - 成員訪問許可權大小:
public
>protected
>包訪問許可權
>private
。 - 成員和類的訪問許可權優先順序:
類
>成員
。
成員最終訪問許可權為類許可權和成員許可權的疊加。只要類不是public
的,無論成員是哪種訪問許可權,靜態與否(即物件成員還是類成員),包外的類都無法訪問類成員(也無法靜態呼叫),即對包外所有類不可見。
例子
- 對於包訪問許可權的類即使其方法是
public
- 當包外訪問
public
類的private
或protected
(未繼承該類)成員時,執行時會報錯如下:該成員不可見
執行時提示該類無法解析。
其實道理很簡單,因為成員是通過類或類物件呼叫的,類許可權比成員許可權優先順序高,所以無論成員許可權多大,只要類不是public
的,就無法通過import
匯入,該類根本就對包外的類不可見,類的成員更是不可見了。
所以,通常來說,只要類是包訪問許可權,其成員最多是包訪問許可權。而且書中也建議:在建立包訪問許可權的類時,應儘可能將類的域宣告為private
的,這樣才有意義。