1. 程式人生 > >head first java第七章的學習

head first java第七章的學習

終於到了最令人驚喜的環節了!面向物件的思想理解。

還是先看看引言部分

為了能夠寫出可適應性強,易於更改和重用的程式,將會學習5個設計步驟,3個多型的技巧,還有八個讓程式更有適應性的方法,4項對繼承的建議。

椅子大戰的回顧

這裡用到了抽象加上繼承的思想,讓程式碼簡潔,可複用

對每一個物件進行分析,抽出共同的類別、方法,如果子類中需要不一樣的方法,那就把父類的方法覆蓋掉(override)。

繼承:繼承的是例項變數和方法,用extends 父類來表示

例子:父類是醫生Doctor 共同是 是否在醫院工作的boolean變數workAtHospital,執行檢查的操作void treatPatient{}

子類是家庭醫生FamilyDoctor和外科醫生Surgeon

家庭醫生還要打電話boolean makePhoneCalls,提出診斷過程void giveAdvice,外科醫生還得進行手術void treatPatient(),截肢操作void makeIncision()。

程式碼實現如下:

class Doctor { boolean workAtHospital; void treatPatient() { } } class FamilyDoctor extends Doctor { boolean makePhoneCalls;

void giveAdvice(){} } class Surgeon extends Doctor { override void treatPatient(){} void makeIncision(){} }

只在乎設計的動物模擬樹

面臨情況:現有一部分動物,但不知何時會增加新的動物

解決辦法:

步驟:1.找共同點:辨別出所有動物都有的特徵

2.設計出父類(有相同的例項變數和行為)

3.子類特殊化方法

4.再細分子類,找出小團體的共同點,抽象出第二層,比如說在類的下屬中另設犬科roam相同和貓科roam也相同,還剩下一個犀牛

5.完成

例項變數:動物的名稱;吃的食物;飢餓值;活動區域範圍;所在位置。

行為:進食void eat();發出聲音void makeNoise();睡覺void sleep();漫步void roam()。

結果:

在一個物件呼叫方法時,會選擇最近的那一個方法進行呼叫

技巧:怎麼判斷自己設計的類是否繼承關係正確:is-a,而不是have-a(應該是例項變數的關係)