第六章訪問許可權控制
6.1 包:庫單元
1、當編寫一個java原始碼檔案時,此檔案通常被稱為編譯單元(有時候也被稱為轉譯單元)。每個編譯單元都必須有一個字尾名.java,而在編譯單元內則可以有一個public類,該類的名稱必須與檔案的名稱相同(包括大小寫,但不包括檔案的字尾名.java)。每個編譯單元只能有一個public類,否則編譯器就不會接受。如果該編譯單元之中還有額外的類的話,那麼在包之外的是無法看到這些累的,因為它們不是public類,而且它們主要用來為主public類提供支援。
6.1.1程式碼組織
1、Java可執行程式時一組可以打包並壓縮這些檔案的查詢,裝載和解釋。
2、類庫實際上是一組類檔案。其中每個檔案都有一個public類,以及任意數量的非public類。因此每個檔案都有一個構件。如果這些構件從屬於同一個群組,就可以使用關鍵字package。
6.1.2建立獨一無二的報名
1、package名稱的第一部分是類的建立者的反順序的Internet域名。
2、Java直譯器的執行過程如下:首先,找出環境變數CLASSPATH。CLASSPATH包含一個或多個目錄,用作查詢.class檔案的根目錄。從根目錄開始,直譯器獲取包的名稱並將每個包點替換成反斜槓,以從CLASSPATH根中產生一個路徑名稱。得到的路徑名稱會與CLASSPATH中的各個不同的項相連線,直譯器就在這些目錄中查詢與你所要建立的類名稱相同的.class檔案。
6.1.3定製工具庫
6.1.4用import改變行為
6.1.5對使用包的忠告
6.2 Jvava訪問許可權修飾詞
6.2.1 包訪問許可權
1、由於一個編譯單元(即一個檔案),只能隸屬於同一個包,所以經由包訪問許可權,處於同一個編譯單元中的所有類彼此之間都是自動可訪問的。
2、取得某成員的訪問權的途徑:
①使該成員成為public。
②通過不加訪問許可權修飾詞並將其他類放置於同一個包內的方式給成員賦予包訪問權。於是包內的其他類也就可以訪問該成員了。
③繼承而來的類既可以訪問public成員也可以訪問protected成員。只有在兩個類都處於同一個包內時,它才可以訪問包訪問許可權的成員。
④提供訪問器和變異器(get/set)方法,以讀取和改變變數的值。
6.2.2 public:介面訪問許可權
6.2.3private:無法訪問
1、除了包含該成員的類之外,其他任何類都無法訪問這個成員。
6.2.4protected:繼承訪問許可權
1、如果建立了一個新包,並自另一個包中繼承類,那麼唯一可以訪問的成員就是源包的public成員。如果在同一個包內執行繼承工作,就可以操縱所有的擁有包訪問許可權的成員。
2、有時候,基類的建立者希望有某個特定成員,把對它的訪問許可權賦予派生類而不是所有類。這就需要protected來完成這一工作。
6.3 介面和實現
1、把資料和方法包裝進類中,以及具體實現的隱藏,常共同被稱作是封裝。
6.4 類的訪問許可權
1、每個編譯單元(檔案)都只能有一個public類。
2、public 類的名稱必須完全與含有該編譯單元的檔名相匹配。
3、雖然不是很常用,但編譯單元內完全不帶public類也是可能的。
4、類即不可以是private,也不可以是protected的。所以對類的訪問許可權,只有包訪問許可權和public。
6.5 總結
1、控制對成員的訪問許可權有兩個原因:①使使用者不要碰觸不該碰觸的部分,這些部分對於內部類的操作是必要的,但是它並不屬於客戶端程式設計師所需介面的一部分。因此,將方法和域指定成private,對客戶端程式設計師而言是一種服務。②讓類庫設計者可以更好更改類的內部工作方式,而不必擔心這樣會對客戶端程式設計師產生重要的影響。