終於到了最令人驚喜的環節了!面向對象的思想理解。
還是先看看引言部分
爲了能夠寫出可適應性強,易於更改和重用的程序,將會學習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(應該是實例變量的關係)