Chapter 7 Reusing Classes

Chapter 7 Reusing Classes

組合和繼承是復(fù)用類的兩個基本方法千贯。

7.1 組合語法

  • 組合是復(fù)用的基礎(chǔ)方法之一,將對象引用置于新類中即可程奠。
  • 作為成員的對象需要在使用前確保初始化丈牢。

7.2 繼承語法

  • 繼承基類的子類會得到積累的所有域和方法。

基類的初始化

  • 當創(chuàng)建一個子類的對象實例時瞄沙,該對象會包含基類的成員對象己沛。
  • 對于基類的靜態(tài)成員,子類會繼承其引用距境。
  • 為此需要確鄙昴幔基類的初始化,執(zhí)行子類的構(gòu)造函數(shù)前垫桂,會自動調(diào)用基類的默認構(gòu)造函數(shù)师幕。
  • 可以使用super來顯示調(diào)用子類的其他構(gòu)造函數(shù),并將其置于構(gòu)造函數(shù)的第一句,這樣就不會自動調(diào)用父類的默認構(gòu)造函數(shù)霹粥。

7.3 代理

代理就是將一個成員對象置于所要構(gòu)造的類中(組成)灭将,并在新類中暴露了該成員對象所有的方法(繼承),以對該成員對象的方法添加其他執(zhí)行過程后控。

  • IDEA可以生成代理類

7.4 結(jié)合組合和繼承

  • 在實際開發(fā)中結(jié)合組合和繼承是非常常見的庙曙。
  • 如果需要清理組合的成員對象,需要顯示地進行處理浩淘,如使用finally捌朴。
  • 使用JAVA5的@override來確保方法覆蓋。

7.5 在組合與繼承之間選擇

  • 組合計數(shù)通常用于在新類中使用現(xiàn)有類的功能张抄。
  • 繼承需要滿足'is-a'的關(guān)系砂蔽,應(yīng)該更關(guān)注于接口和其實現(xiàn)。統(tǒng)一不同的代碼流程署惯。

7.6 protected關(guān)鍵字

  • protected訪問權(quán)限提供了子類和包內(nèi)的訪問左驾。
  • 應(yīng)該使用private來保留改變底層實現(xiàn)的權(quán)利,然后通過protected控制子類的訪問權(quán)限泽台。

7.7 向上轉(zhuǎn)型

  • 繼承技術(shù)除了為新的類提供方法外什荣,更重要的方面是表現(xiàn)新類和基類之間的關(guān)系("is-a")。
  • 將子類的引用轉(zhuǎn)換為父類引用的動作怀酷,稱為向上轉(zhuǎn)型稻爬。
  • 向上轉(zhuǎn)型是一種安全的轉(zhuǎn)換,可以用來統(tǒng)一不同的代碼蜕依。
  • 只有當需要向上轉(zhuǎn)型時才需要使用繼承(is-a關(guān)系)桅锄。

7.8 final關(guān)鍵字

Java的關(guān)鍵字final表示"不法改變的"。

final數(shù)據(jù)

  • final static基本數(shù)據(jù)類型和String能夠成為編譯時常量样眠,只有一份友瘤,減輕運行負擔。
  • final對象引用檐束,引用無法改變稿壁,但對象自身可以改變芝硬。
  • final方法參數(shù)能夠表明方法不會改變基本數(shù)據(jù)類型的參數(shù)變量。

final方法

  • final方法能夠保證無法被覆蓋修改。
  • final方法在初期能夠提升編譯器方法調(diào)用的效率尼变,Java5的JVM開始基本不需要了骂租。

final類

  • fiinal類無法被繼承蚊夫,其域和方法都被定義為final券时。

有關(guān)final的忠告

  • 將方法指明為final,一般是類庫開發(fā)者為了不讓別人繼承這些類的一種指導(dǎo)黄选。
  • 你無法猜測將來人們會怎么使用你的類蝇摸。

7.9 初始化及類的加載

  • 在Java中,加載的單元是一個類(.class文件)。
  • 在初次使用類的時才會對類程序代碼進行加載貌夕,包括創(chuàng)建對象和訪問static域或方法律歼。
  • 加載時,所有static對象和static代碼會按書寫順序依次初始化一次蜂嗽。

繼承與初始化

再次回顧加載過程:

  1. 父類靜態(tài)成員自動初始化
  2. 父類靜態(tài)初始塊苗膝、父類靜態(tài)成員指定初始化
  3. 子類靜態(tài)成員自動初始化
  4. 子類靜態(tài)初始塊殃恒、類靜態(tài)成員指定初始化
  5. 父類初始塊植旧、父類成員變量指定初始化
  6. 父類構(gòu)造函數(shù)(若沒有在構(gòu)造器里super指定,調(diào)用無參構(gòu)造函數(shù))
  7. 子類初始塊离唐、子類成員變量指定初始化
  8. 子類構(gòu)造函數(shù)
  • 當在一個類文件上運行Java時病附,首先試圖訪問該類的main()方法(static)。
  • 于是加載器開始啟動并通過package對應(yīng)os目錄找到編譯代碼(.class文件)亥鬓。
  • 開始加載時完沪,編譯器先通過extends得知基類的存在,于是優(yōu)先加載基類嵌戈。
  • 基類的static初始化開始被執(zhí)行覆积,按書寫順序進行靜態(tài)域的初始化。
  • 然后開始進行子類的static初始化(因為子類的static域可能依賴于基類)熟呛。
  • 至此宽档,類已加載完畢沒開始進行對象創(chuàng)建的過程。
  • 首先對象的基本類型數(shù)據(jù)設(shè)為默認值(自動初始化)庵朝,對象引用設(shè)為null(二進制0)吗冤。
  • 之后開始執(zhí)行基類的構(gòu)造函數(shù)(自動調(diào)用默認構(gòu)造函數(shù),或者通過super指定)九府,然后子類構(gòu)造函數(shù)其他部分椎瘟。

7.10 總結(jié)

  • 繼承和組合都是復(fù)用類(代碼)的基本方式,優(yōu)先考慮組合侄旬,只有當需要向上轉(zhuǎn)型的時候才用繼承肺蔚。
  • 程序開發(fā)是一個增量過程,開發(fā)項目時無法知道所有的答案儡羔,所以將項目視作一種有機的宣羊、進化這的生命體而去培養(yǎng)(并通過訪問控制機、final對其進化進行一定的限制)笔链。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末段只,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鉴扫,更是在濱河造成了極大的恐慌赞枕,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異炕婶,居然都是意外死亡姐赡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門柠掂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來项滑,“玉大人,你說我怎么就攤上這事涯贞∏箍瘢” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵宋渔,是天一觀的道長州疾。 經(jīng)常有香客問我,道長皇拣,這世上最難降的妖魔是什么严蓖? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮氧急,結(jié)果婚禮上颗胡,老公的妹妹穿的比我還像新娘。我一直安慰自己吩坝,他們只是感情好毒姨,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著钾恢,像睡著了一般手素。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瘩蚪,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天泉懦,我揣著相機與錄音,去河邊找鬼疹瘦。 笑死崩哩,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的言沐。 我是一名探鬼主播邓嘹,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼险胰!你這毒婦竟也來了汹押?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤起便,失蹤者是張志新(化名)和其女友劉穎棚贾,沒想到半個月后窖维,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡妙痹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年铸史,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怯伊。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡琳轿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出耿芹,到底是詐尸還是另有隱情崭篡,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布猩系,位于F島的核電站媚送,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏寇甸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一疗涉、第九天 我趴在偏房一處隱蔽的房頂上張望拿霉。 院中可真熱鬧,春花似錦咱扣、人聲如沸绽淘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沪铭。三九已至,卻和暖如春偏瓤,著一層夾襖步出監(jiān)牢的瞬間杀怠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工厅克, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赔退,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓证舟,卻偏偏與公主長得像硕旗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子女责,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習記錄文檔漆枚,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 2,762評論 2 9
  • 一:java概述:1抵知,JDK:Java Development Kit墙基,java的開發(fā)和運行環(huán)境昔榴,java的開發(fā)工...
    ZaneInTheSun閱讀 2,654評論 0 11
  • C++文件 例:從文件income. in中讀入收入直到文件結(jié)束,并將收入和稅金輸出到文件tax. out碘橘。 檢查...
    SeanC52111閱讀 2,789評論 0 3
  • Class and Interfaces CLASSES and interfaces lie at the he...
    LaMole閱讀 892評論 0 1
  • 面向?qū)ο笾饕槍γ嫦蜻^程互订。 面向過程的基本單元是函數(shù)。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,057評論 0 4