第一章:對象簡介
對象有狀態(tài)、行為、標識。
類與數(shù)據(jù)類型區(qū)別:
類實際上是一種數(shù)據(jù)類型。它們的區(qū)別在于:類是程序員為解決特定問題而定做的,而數(shù)據(jù)類型是為了表示機器的存儲單元而設(shè)計的,它是現(xiàn)成的,是程序員無可奈何時的選擇。
面向?qū)ο缶幊痰奶魬?zhàn)之一就是:如何在問題空間的元素與解決空間的對象之間建立一種一對一的映射。
可以向每個對象發(fā)送請求,這樣才能讓對象為你解決問題,但每個對象只能滿足某些請求,具體能夠滿足哪些請求呢?這是由對象的
接口(interface)所定義的。決定接口的是對象的類型。接口只管你能向?qū)ο蟀l(fā)送什么請求,但還必須要有滿足這一請求的代碼,這些代碼以及隱藏著的數(shù)據(jù),組成了
實現(xiàn)(implementation)
將對象做為服務(wù)的提供者
隱藏實現(xiàn):將程序分為類的創(chuàng)造者(class creator)和客戶程序員(client programmer).訪問控制符:public,private,protected.public表示后面跟著的東西誰都能用。而private表示除非是類的創(chuàng)建者用這個類的方法進行訪問,否則沒人能訪問到這個元素。protected很像private,它們的區(qū)別在于,繼承類能夠訪問 protected成員但是不能訪問private成員。Java還有一個“缺省”的訪問權(quán)限。通常稱為package訪問權(quán)限。國為同屬這個 package的類可以訪問這個package中其它類的“缺省權(quán)限”的成員。但是出了這個package,它們就都是private的了。
復(fù)用實現(xiàn)(合成):在一個類中用另一個類創(chuàng)建對象,為了能讓新的類提供我所設(shè)計的功能,它可以由任意多個,任意類型的對象,以任意形式組合在一起。由于你是用已有的類來合成新的類,因此這一概念被稱為合成。如果這個對象是動態(tài)合成的,通常稱為聚合。通常交合成稱為“有(has-a )"關(guān)系。
繼承:(復(fù)用接口)當你繼承一個類時,你也創(chuàng)建了一個新類,這個新的類不僅包含了已有類的所有成員,更重要的是它復(fù)制了基類的接口,于是所有能夠傳給基類的消息也都可以傳給派生類。
你有兩種辦法來區(qū)分新的派生出來的類和那個原來的基類。第一種方法很簡單:直接往派生類里加新的方法。這些新的方法不屬于基類的接口。也就是說由于基類不能完成所有的工作,你必須加上更多的方法。第二種方法是在新的類中修改基類方法的行為,這被稱為覆寫(override)那個方法。要覆寫一個方法直接在類中重新定義這個方法就行了。
多態(tài)性:多態(tài)性指的是相關(guān)的對象按照各自類型來實現(xiàn)方法的能力。繼承性指的就是派生類(子類)繼承抽象類(基類、父類),它是一種類特殊化的方式,用于聯(lián)系派生類和抽象類。在這里我把這兩個特點一起舉例說明一下。在魔獸里,四個種族都有農(nóng)民,而且屬性和方法基本一樣,那我們就可以為農(nóng)民這個概念設(shè)置一個基類,然后將每族農(nóng)民設(shè)為一個子類。每個子類方法的類型可能不一樣。在運行時,通過判定對象所屬的類型再去執(zhí)行相應(yīng)類型所對應(yīng)的方法的。所以多態(tài)性與繼承是緊密關(guān)聯(lián)的。
抽象類與接口(abstrcat與interface): 通常在有些設(shè)計方案中,你只想讓基類去表示由其派生出的類的接口。也就是你不想讓人創(chuàng)建一個基類的對象,而只是想把對象上傳給它,以期能使用這個類的接口。這樣你就需要使用abstract關(guān)鍵詞來把這個類做成抽象類。編譯器會阻止任何人創(chuàng)建abstrcat的對象。abstrcat 關(guān)鍵詞也可以用來表示這個方法還沒有實現(xiàn)--它就象是一個聲明”由這個類所派生出的所有類都有這個方法,但是它的實現(xiàn)不在這里“。abstrcat方法只能存在于abstrcat類里。如果有個類繼承了這個abstrcat類,那么它要么實現(xiàn)這個方法,要么也是一個abstrcat類。abstrcat方法能讓你將方法放到接口而不必為它寫一些無意義的代碼。interface關(guān)鍵詞更是對abstrcat類的概念的深化,它不允許你實現(xiàn)任何方法。如果你愿意你可以繼承多個接口,因為要繼承多個常規(guī)或是抽象類是不允許的。