類的封裝、繼承和多態

類是對對象的一個抽象,同時類也爲對象進行了封裝。所謂封裝是說類的設計者只是爲使用者提供類 對象可以訪問的部分,而對於類中其他隱藏起來的成員變量 方法,用戶不能訪問。 實現方式:A:在類的定義中設置對對象中成員變量和方法進行訪問的權限; B:提供一個統一的供其他類引用的方法; C:其它對象不能直接修改文本對象所擁有的屬性和方法。 2。訪問權限: A:private的成員變量和方法只能被這個類本身的方法訪問; B:默認的成員變量和方法只被同一個包內的其它所有類都可訪問,包外不可; C: protected的成員可以被這個類的本身、它的子類(同不同包均可)訪問; D: public 完全公開。一個程序裏最多只能有一個類被修飾爲public,若程序中沒有任何public 類,且文件名是程序中的一個類名,則該類被視做public 注:不能用protected和private飾!!!! 3。類的繼承: 3.1 類繼承的實現: A:java中Object類是java中所有類的祖宗!(P209) 兒子A extends 老爸------只能有一個老爸! 3.2 this和super: this: this.數據成員 this.實例方法 this(參數)--引用本類中其他構造方法。 super:表示當前對象父類對象的引用 super.數據成員 super.實例方法 super(參數)--引用父類的構造方法。--通常在實現子 類的構造方法時,要先調用父類的構造方法!並且用來調用父類構造方法的super()必須放在子類構造方法的句首 3.3 初始化順序: A 對象的初始化順序: 先靜態成員,再非靜態成員,再構造方法, B 繼承中構造方法的調用順序: 先父類,再子類。 3.4 對象之間的類型轉換: 對象轉換的聖經:只能說貓是哺乳動物,不能說哺乳動物是貓!!!當說貓是哺乳動物時,貓將失掉貓獨有的屬性和行爲!!!(作爲貓時新增的成員變量和方法) 哺乳動物 aa=new 貓()---貓是哺乳動物(要通過IS-A測試) 4.千呼萬喚始出來------多態! 所謂多態就是同一方法獲得不同的行爲特性! 分爲: A 編譯時多態性---重載 (參數個數不同或參數類型不同) B 動態多態性----覆蓋( 改寫後的方法不能比覆蓋的方法有更嚴格的訪問權限--只能更加開放& 改寫後的方法不能比被覆蓋的法產生更多的例外) ****************************************************************** 放點小音樂吧! **** ******* 第一曲 final: 1。final type 變量名=初值---常量 2。final 方法---該方法任何時候都不可以覆蓋,但可以被重載。 3。final 類 ----該類不能被繼承並覆蓋其內容。(像System類,String類) 第二曲 native: 本地引用說明符^@^ java允許在程序中直接引用本地機上非java語言編寫的程序。 native type programName([參數列表]); programName是要引用的程序名,以方法的形式出現。由於是引用,具體執行的操作都包含在源程序中,所有programName後無具體方法體! ****************************************************************** 一。深入繼承: 1》設計繼承樹: (1)找出具有共同屬性和行爲的對象(狼和狗與羊^^---動物共同的屬性) (2)設計代表共同狀態與行爲的類(都屬於動物!---父類) (3)決定子類是否需要讓某項行爲有特定不同運作的方式(都會吃,但羊只吃草---方法的覆蓋) (4)通過尋找使用共同行爲的子類找出更多抽象化的機會(狼和狗屬於犬科!!!--再繼承) (5)檢查設計是否合理(IS-A) (6)大功告成! 2》繼承的意義: (1)避免了重複的代碼(子類會時時響應父類的改變) (2)定義出共同的協議(服務於多態^^) ?當定主義出一組類的父型時,你可以用子型的任何類來填補任何需要或期待父型的位置? 二。深入多態: (1) class Vet{ public void giveShot(Animal a){ a.makeNoise(); } } class PetOwner{ public void start(){ Vet v=new Vet(); Dog d=new Dog(); Hippo h=new Hippo(); v.giveShot(d); V.giveSHot(h); } } 在此例中如果用Animal類型來聲明它的參數(返回類型、數組的類型),則程序代碼就可以處理所有Animal的子類。這意味 着其它人只要注意到要擴充過Animal就可以利用你的Vet!(P168) 如果此例不用多態,那麼每一種動物都要寫出不同的方法--這是何等悲哀!! (2)接口: 多態意味着“很多形式”,可以把兒子當作爸爸或爺爺!! 可以通過繼承來定義相關類間的共同協議(方法就是協議的標誌!),這樣就等同於在對其他程序代碼聲明:“我所有的子類都能腸系用這些方法來執行這幾項工作!” 爲了避免出現“致命方塊”所以java不允許出現多繼承,接口正是我們的救星!java接口是100% 的純抽象類。而且使用接口可以繼承一個以上的來源,同時其他類也可以實現同一個接口中。所以可以爲不同的需求組合出不同的繼承層次! 三。如何判斷應該是設計類、子類、抽象類或接口呢? (1)如果新類無法對其他的類通過IS-A測試時,就設計不繼承其他類的類。 (2)只有在需要某類的特殊化版本時,以覆蓋或增加新的方法來繼承現有的類。 (3)當你需要定義一羣子類的模板,又不想讓其他人初始化此模版時,設計出抽象的類給他們用。 (4)如果想要只定義出類可以扮演的角色,使用接口。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章