【Java編程思想】訪問權限控制

一、包: 庫單元

包(package)內包含有一組類,它們被組織在一個單一的名字空間(namespace)之下。與包相關的關鍵字有兩個:importpackage

  • 當使用類庫中某個包的類時,通常使用import關鍵字。如要用到java.util中的ArrayList類,一種方法是用其全名java.util.ArrayList來指定;
    public class FullQualification {
        public static void main(String[] args) {
            java.util.ArrayList list = new java.util.ArrayList();
        }
    }
    import java.util.ArrayList;
    public class SingletonImport {
        public static void main(String[] args) {
            ArrayList list = new ArrayList();
        }
    }
  • 如果希望將多個類組織在一個包中,通常使用package關鍵字,如果使用package語句,它必須是.java文件中處註釋外的第一句程序代碼,在文件起始處寫:package access; 表示該編譯單元(.java文件)是名爲access的類庫的一部分。
  • 作爲一名類庫設計人員,應該記住:packageimport關鍵字是爲了將單一的全局名字空間分割爲不同的部分,使得無論多少人使用Internet以及Java編寫類,不會出現名稱衝突。

二、Java訪問權限

Java中訪問權限分爲類訪問權限成員訪問權限,訪問修飾詞有publicprotectedprivate。如果不提供任何訪問修飾詞,則意味着它是“包訪問權限(package access)”,有時包訪問權限用修飾詞friendly表示。

2.1 成員訪問權限

The Java access specifiers public, protected and private are placed in front of each definition for each member in your class, whether it’s a field or a method. Each access specifier only controls the access for that particular definition.

  • public: 接口訪問權限,使用關鍵字public,表示public之後跟着的成員對於每個人都是可以訪問的。
  • 默認包權限(friendly):包訪問權限,表示該成員對於同一個包中的類都是可以訪問的。
  • protected: 繼承訪問權限,protected處理的是繼承的概念,如果新建了一個新包,並從另一個包中繼承類,那麼唯一可以訪問的成員就是源包的public成員。如果基類的創建者希望某個特定成員對於包外的類只對其子類開放訪問權限,就需要使用protected。protected也提供包訪問權限。
  • private:無法訪問權限,除了包含該成員的類之外,其他任何類都無法訪問這個成員。

2.2 類訪問權限

在Java中,訪問權限修飾詞也可以用於確定庫中哪些類對於該庫的使用者是可用的。
爲了控制類的訪問權限,修飾詞必須放在關鍵字class之前。如果希望某個類可以爲某個客戶端程序員所用,可以使用public作用於整個類的定義來達到目的。因此可以像下面這樣聲明:

    public class Widget {

注意,對於public class有一些額外限制:

  • 每個編譯單元(compilation unit)即.java文件都只能有一個public類。
  • public類的名稱必須完全與該編譯單元的文件名一樣,包括大小寫。所以對於Widget而言,文件的名稱必須是Widget.java
  • 編譯單元內完全不帶public類也是可能的。在這種情況下,可以隨意對文件命名。

注意,類既不可以是private的也不可以是protected的(除內部類除外)。對於類的訪問權限,僅有兩個選擇:包訪問權限或public

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章