1. 程式人生 > >Java訪問許可權控制簡述

Java訪問許可權控制簡述

四種訪問許可權

Java中類與成員的訪問許可權共有四種,其中三種有訪問許可權修飾詞:publicprotectedprivate,。

  • Public:許可權最大,允許所有類訪問,但其他包下的類想要訪問需使用import關鍵字將這些public類匯入包中才可使用,換句話說,import將不同包的類匯入到一個包下,從而轉化為包訪問許可權下的情況。
  • Protected:除了提供包訪問許可權以外,還對繼承該類的所有派生類賦予訪問許可權。
  • Private:許可權最小,只能由包含該成員(域和方法)的類本身訪問,其他任何類都無法訪問。

不使用這三個關鍵詞時,則提供預設包訪問許可權,該許可權只允許同一個包下(即同一個目錄下的Java檔案)的類訪問該類。

注意:private和protected只能修飾成員,無法修飾類。類要麼是public的,要麼是包訪問許可權。

成員最終訪問許可權

  • 類訪問許可權大小:public>包訪問許可權
  • 成員訪問許可權大小:public >protected >包訪問許可權 > private
  • 成員和類的訪問許可權優先順序: > 成員

成員最終訪問許可權為類許可權和成員許可權的疊加。只要類不是public的,無論成員是哪種訪問許可權,靜態與否(即物件成員還是類成員),包外的類都無法訪問類成員(也無法靜態呼叫),即對包外所有類不可見。

例子

  • 對於包訪問許可權的類即使其方法是public
    的,也無法從包外訪問。我用eclipse寫了程式實際測試了一下,執行報錯如下
    執行結果報錯
  • 當包外訪問public類的privateprotected(未繼承該類)成員時,執行時會報錯如下:該成員不可見
    執行結果報錯
    執行時提示該類無法解析。

其實道理很簡單,因為成員是通過類或類物件呼叫的,類許可權比成員許可權優先順序高,所以無論成員許可權多大,只要類不是public的,就無法通過import匯入,該類根本就對包外的類不可見,類的成員更是不可見了。

所以,通常來說,只要類是包訪問許可權,其成員最多是包訪問許可權。而且書中也建議:在建立包訪問許可權的類時,應儘可能將類的域宣告為private的,這樣才有意義。