5: Hiding the Implementation(隱藏實現)
package:類庫的單元
創建獨一無二的package名字
Java的約定是package名字的第一部分應該是類的創建者的Internet域名的反寫。
使用JAR文件的時候會有一點變化。除了要告訴它該到哪里去找這個JAR文件,你必須將文件名放到CLASSPATH里面。
沖突
一個自定義的工具類庫
使用import來改變程序的行為方式
使用package的忠告
Java的訪問控制符
package訪問權限
如果你想讓別人能訪問到這個成員,那唯一辦法就是:
1. 把這個成員做成public的。這樣任何人,任何地方就都能訪問到它了。
2. 不放任何訪問控制符,賦予這個成員package權限,然后往package里面放其它類。這樣,這個package的其它類就能訪問這個成員了。
3. 繼承類除了能訪問父類的public成員之外,還可以訪問其protected成員(但是不能訪問private成員)。只有當兩個類都同屬一個package的時候,它才能訪問package成員。
4. 提供“訪問器/修改器”方法(accessor/mutator方法,也被稱為“get/set”方法)。以OOP的觀點衡量,這是最合理的做法,而且也是JavaBean的基礎。
public:訪問接口的權限
默認的package
Java會認為這類文件是屬于這個目錄的“默認”的,因此對這個目錄里邊的其它文件來說,它們就都是package權限的了。
private:你碰都碰不到!
始終如一地使用private還是很重要的,特別是遇到多線程的時候。
protect:繼承的訪問權限
接口(Interface)與實現(implementation)
類的訪問權限
1. 每個編譯單元(文件)只能有一個public類。這么做的意思是,每個編譯單元只能有一個公開的接口,而這個接口就由其public類來表示。你可以根據需要,往這個文件里面添加任意多個提供輔助功能的package權限的類。但是如果這個編譯單元里面有兩個或兩個以上的public類的話,編譯器就會報錯。
2. public類的名字必須和這個編譯單元的文件名完全相同,包括大小寫。如果你不遵守,編譯器又要報錯了。
3. 編譯單元里面可以沒有public類,雖然這種情況不常見,但卻是可以的。這是,你就能隨意為文件起名字了。
總結
練習
「讀書筆記」Thinking in Java 3rd Edition - 6: Reusing Classes