被客戶不斷變化的需求折磨:客戶的需求總是在不斷變化過程中
原因很簡單、客戶根本不知道自己需要什麼東西,先給你提出一個需求。等你程序開發出來了,
他用了,可能跟他想的、說的不一樣,伴隨着整個軟件開發的生命週期。
我們無法阻止客戶變更需求,我們使用面向對象的設計方法,能讓我們程序適應需求的變化。
繼承的好處:1:提高了代碼的複用性。
2:讓類與類之間產生了關係,提供了另一個特徵多態的前提
面向對象:先抽象再具體。好處是什麼?Boss談話:我們要好好努力,爲xxx而努力奮鬥。
1、只有方法的定義沒有方法體;(就沒有完成的方法)
2、用abstract修飾的方法;
eat不太好寫,亞洲人吃飯用筷子,歐美人用刀叉,印度人用手!怎麼辦?稍後解釋
某個類中含有抽象方法,那麼就稱之爲抽象類,同樣有abstract修飾。
1.抽象類不能夠生成對象。只可以用來繼承。(抽象類天生就是用來當爹的!)
2.一個類中如果包含抽象方法,那麼這個類必須被聲明成抽象類。
3.抽象類的子類一定要必須去實現父類的抽象方法。
4.若子類不能幫助父類實現抽象,那麼子類就是一個抽象類。只能有子類的子類再去完成
5.如果一個類中沒有抽象函數,這個類也可以被聲明成抽象類。(爲啥?防止這個類被生成對象)
1、抽象類不能生成對象。2、構造函數用於生成類的對象。
結論:???見示例
抽象類不能生成對象,但是卻可以擁有構造函數,是爲子類調用準備的。
汽車?開汽車drive()的方法沒有辦法給具體的方法體?手動檔自動檔開法不一樣!
無法給出具體的駕駛方法,要看具體類型的汽車再來定義具體的駕駛方法。
那麼把這個方法定義成抽象的,把這個汽車類也定義成抽象的。
現實世界的接口:
例如USB接口,可以接這麼多設備(手機、mp3、電扇、鼠標、冰箱)
(定義了一個標準:傳遞數據標準、供電標準)
面向對象世界的接口:
定義了接口,就是定義了調用對象的標準。
接口就是比較純粹的抽象類;
在接口中可以省略abstract,默認都是抽象方法。
(方法前面不用寫abstract,接口裏的方法都是public的。注意:接口就不允許有非抽象方法。)
接口也不能實例化生成對象,只能被實現(關鍵字:implements)。
實現接口就必須要實現接口中的抽象方法。
一個類可以實現多個接口(手機可以實現usb標準,也可以實現wifi接口,還可以實現藍牙接口)
爲什麼要使用接口?
工廠方法模式(非常常用的設計模式)
接口:定義接口interface、實現接口(implements)
接口就不允許有非抽象方法。(只是將abstrct省略了而已)
★接口實現動態多態,也可以使用接口的引用指向實現類的對象!
四、final:關鍵字(修飾詞)是最終的,不可以修改的意思。
有三種用法:
第一種:用來修飾變量,是不可以被修改的。一旦有的值就不能被修改。
public final int age = 20;
第二種:用來修飾方法,是不能被子類覆蓋的。
public final void fianlTest(){}
第三種:用來修飾類:那麼類就不能被繼承
final class FinalDo{}