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(應該是實例變量的關係)

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章