5: Hiding the Implementation(隱藏實(shí)現(xiàn))

package:類(lèi)庫(kù)的單元
創(chuàng)建獨(dú)一無(wú)二的package名字
Java的約定是package名字的第一部分應(yīng)該是類(lèi)的創(chuàng)建者的Internet域名的反寫(xiě)。
使用JAR文件的時(shí)候會(huì)有一點(diǎn)變化。除了要告訴它該到哪里去找這個(gè)JAR文件,你必須將文件名放到CLASSPATH里面。
沖突
一個(gè)自定義的工具類(lèi)庫(kù)
使用import來(lái)改變程序的行為方式
使用package的忠告

Java的訪問(wèn)控制符
package訪問(wèn)權(quán)限
如果你想讓別人能訪問(wèn)到這個(gè)成員,那唯一辦法就是:
1. 把這個(gè)成員做成public的。這樣任何人,任何地方就都能訪問(wèn)到它了。
2. 不放任何訪問(wèn)控制符,賦予這個(gè)成員package權(quán)限,然后往package里面放其它類(lèi)。這樣,這個(gè)package的其它類(lèi)就能訪問(wèn)這個(gè)成員了。
3. 繼承類(lèi)除了能訪問(wèn)父類(lèi)的public成員之外,還可以訪問(wèn)其protected成員(但是不能訪問(wèn)private成員)。只有當(dāng)兩個(gè)類(lèi)都同屬一個(gè)package的時(shí)候,它才能訪問(wèn)package成員。
4. 提供“訪問(wèn)器/修改器”方法(accessor/mutator方法,也被稱(chēng)為“get/set”方法)。以O(shè)OP的觀點(diǎn)衡量,這是最合理的做法,而且也是JavaBean的基礎(chǔ)。
public:訪問(wèn)接口的權(quán)限
默認(rèn)的package
Java會(huì)認(rèn)為這類(lèi)文件是屬于這個(gè)目錄的“默認(rèn)”的,因此對(duì)這個(gè)目錄里邊的其它文件來(lái)說(shuō),它們就都是package權(quán)限的了。
private:你碰都碰不到!
始終如一地使用private還是很重要的,特別是遇到多線程的時(shí)候。
protect:繼承的訪問(wèn)權(quán)限

接口(Interface)與實(shí)現(xiàn)(implementation)

類(lèi)的訪問(wèn)權(quán)限
1. 每個(gè)編譯單元(文件)只能有一個(gè)public類(lèi)。這么做的意思是,每個(gè)編譯單元只能有一個(gè)公開(kāi)的接口,而這個(gè)接口就由其public類(lèi)來(lái)表示。你可以根據(jù)需要,往這個(gè)文件里面添加任意多個(gè)提供輔助功能的package權(quán)限的類(lèi)。但是如果這個(gè)編譯單元里面有兩個(gè)或兩個(gè)以上的public類(lèi)的話,編譯器就會(huì)報(bào)錯(cuò)。
2. public類(lèi)的名字必須和這個(gè)編譯單元的文件名完全相同,包括大小寫(xiě)。如果你不遵守,編譯器又要報(bào)錯(cuò)了。
3. 編譯單元里面可以沒(méi)有public類(lèi),雖然這種情況不常見(jiàn),但卻是可以的。這是,你就能隨意為文件起名字了。

總結(jié)

練習(xí)

「讀書(shū)筆記」Thinking in Java 3rd Edition - 6: Reusing Classes