1.前言
Java提供了4中訪問權限,從最大權限到最小權限依次爲:public、protected、包訪問權限(或稱爲friendly,它沒有關鍵詞)和private。其中Java不同於C++的地方在於多出了“包”的概念。
2.介紹
由於其他三種與C++中差別不大,這裏重點介紹包訪問權限。
2.1 包訪問權限
意味着當前包中的所有其他類對那個成員都有訪問權限,但對於這個包之外的所有類,這個成員卻是private。 ——摘自《Thinking in Java》
那麼這句話該如何理解?是包中的所有類都可以直接調用其他的包訪問權限修飾的成員嗎?非也,當然需要使用該類的對象纔可以調用,或者修飾爲static直接用類名調用。
示例代碼:
class Instrument{ //包訪問控制的類
void play() { //包訪問控制的成員函數
System.out.print(what()+" is playing!");
}
String what() { //包訪問控制的成員函數
return "Instrument";
}
}
public class Main{
public static void main(String[] args) {
Instrument i=new Instrument();
//需要先創建對象才能訪問其成員函數,或者將成員函數用static修飾
i.play(); //在同一個包中訪問friendly類的friendly成員函數
}
}
2.2 類的訪問權限
在Java中,訪問權限修飾詞也可以用於確定庫中的哪些類對於該庫的使用者是可用的。如果希望某個類可以爲某個客戶端程序員所用,就可以用public修飾這個類。
注意:
(1)每個編譯單元(文件)都只能有一個public類,這表示每個編譯單元都有單一的公共接口,該接口可以按要求包含衆多的支持包訪問權限的類。
(2)public類的名稱必須與含有該編譯單元的文件名相同,包括大小寫。
(3)雖然不常用,但編譯單元內完全不帶public類也是可能的。