接口:
規(guī)定了可對一個特定的對象發(fā)出哪些請求。然而,必須在某個地方存在著一些代碼,以便滿足這些請求。這些代碼隱藏起來的數(shù)據(jù)叫做“隱藏的實現(xiàn)”。
有兩方面原因促使我們控制成員的訪問。第一個原因是防止程序員接觸他們不該接觸的東西--通常是內(nèi)部數(shù)據(jù)類型的設計思想。 ? ? ? ? ? ? ? ? ?第二個原因是允許庫設計成員修改內(nèi)部結(jié)構(gòu),不用擔心它會對客戶程序員造成什么影響。
java采用三個顯式關(guān)鍵字和一個隱式關(guān)鍵字來設置邊界:public,private,protected以及friendly。
public:任何人都能使用。private:除了自己、類型創(chuàng)建者、和那個類型的內(nèi)部函數(shù)成員、其他都不能訪問。試圖訪問會得到編譯期錯誤。friendly 涉及package,若某樣東西是“友好的”,意味著它只能在這個包裝的范圍內(nèi)使用。protected:受保護的,只是集成的類可以訪問受保護的成員,但不能訪問私有成員。
組織與繼承:
組織:在現(xiàn)有類的基礎上組織一個新的類,也叫包含關(guān)系,具有極大的靈活性,新類的“成員對象”通常設為“私有”,客戶程序員不能訪問他們,我們可以在不干擾客戶的代碼前提下,從容地修改那些成員。繼承并不具備這樣的靈活性。因為編譯器必須對通過繼承創(chuàng)建的類加以限制。 ? “繼承隨處可見”這種思路產(chǎn)生的設計將是非常笨拙的,會大大增加程序的復雜程度。相反,新建類的時候,首先應考慮“組織”對象;這樣做顯得更加簡單和靈活。利用對象的組織,我們的設計可保持清爽。
繼承:子類對象可以轉(zhuǎn)為基礎類對象。將其視為“純替換”。是一種“等價”關(guān)系,“圓就是一種幾何形狀”。 這種替換不完美,在基礎類里不能訪問衍生類的新函數(shù)。
Upcasting:把衍生類當做他的基本類處理的過程叫做“upcating”?!癱ast”是根據(jù)一個縣城的模型創(chuàng)建;“up”表明繼承的方向是從上面來的。
動態(tài)綁定:當一個函數(shù)的參數(shù)是父類的時候,可使用子類對象做參調(diào)用。而且會自動執(zhí)行正確的方法,比如子類重寫了方法,在調(diào)用時會執(zhí)行子類的方法。將一條消息發(fā)給對象時,如果并不知道對方具體類型是什么,但采用的行動同樣是正確的,這種情況叫“多形性”。編譯器和運行期系統(tǒng)會負責對所用細節(jié)的控制。