Java的“友好的”訪問指示符(修飾符)

FrankYou發表於2016-10-20

如果根本不指定訪問指示符,就象本章之前的所有例子那樣,這時會出現什麼情況呢?預設的訪問沒有關鍵字,但它通常稱為“友好”(Friendly)訪問。這意味著當前包內的其他所有類都能訪問“友好的”成員,但對包外的所有類來說,這些成員卻是“私有”(Private)的外界不得訪問。由於一個編譯單元(一個檔案)只能從屬於單個包,所以單個編譯單元內的所有類相互間都是自動“友好”的。因此,我們也說友好元素擁有“包訪問”許可權。友好訪問允許我們將相關的類都組合到一個包裡,使它們相互間方便地進行溝通。將類組合到一個包內以後(這樣便允許友好成員的相互訪問,亦即讓它們“交朋友”),我們便“擁有”了那個包內的程式碼。只有我們已經擁有的程式碼才能友好地訪問自己擁有的其他程式碼。我們可認為友好訪問使類在一個包內的組合顯得有意義,或者說前者是後者的原因。在許多語言中,我們在檔案內組織定義的方式往往顯得有些牽強。但在Java中,卻強制用一種頗有意義的形式進行組織。除此以外,我們有時可能想排除一些類,不想讓它們訪問當前包內定義的類。對於任何關係,一個非常重要的問題是“誰能訪問我們的‘私有’或private 程式碼”。類控制著哪些程式碼能夠訪問自己的成員。沒有任何祕訣可以“闖入”。另一個包內推薦可以宣告一個新類,然後說:“嗨,我是Bob的朋友!”,並指望看到Bob的“protected”(受到保護的)、友好的以及“private”(私有)的成員。

為獲得對一個訪問許可權,唯一的方法就是:
(1) 使成員成為“public”(公共的)。這樣所有人從任何地方都可以訪問它。
(2) 變成一個“友好”成員,方法是捨棄所有訪問指示符,並將其類置於相同的包內。這樣一來,其他類就可以訪問成員。
(3)正如以後引入“繼承”概念後大家會知道的那樣,一個繼承的類既可以訪問一個protected成員,也可以訪問一個public成員(但不可訪問private成員)。只有在兩個類位於相同的包內時,它才可以訪問友好成員。但現在不必關心這方面的問題。
(4) 提供“訪問器/變化器”方法(亦稱為“獲取/設定”方法),以便讀取和修改值。這是OOP 環境中最正規的一種方法,也是Java Beans 的基礎。

相關文章