天天看點

022-抽象類與抽象方法

聲明:我的所有文章,都是對網上教學視訊的整理,包括狂神說、尚矽谷、黑馬程式員等等,用來作為參考資料,無任何商業使用,請廣大網友參考,不喜勿噴,謝謝。(注意,由于網站的原因,有些代碼字元可能會出現問題,建議大家閱讀代碼時,最好和下面的圖檔對應來看)

一、抽象類的引入

随着繼承層次中一個個新子類的定義,類變得越來越具體,而父類則更一般,更通用。類的設計應該保證父類和子類能夠共享特征。有時将一個父類設計得非常抽象,以至于它沒有具體的執行個體,這樣的類叫做抽象類。

022-抽象類與抽象方法

二、抽象類與抽象方法的定義

1、用abstract關鍵字來修飾一個類,這個類叫做抽象類

2、用abstract來修飾一個方法,該方法叫做抽象方法,該方法隻有方法的聲明,沒有方法的實作,以分号結束,如:public abstract void talk();

3、含有抽象方法的類必須被聲明為抽象類

4、抽象類不能被執行個體化,抽象類是用來被繼承的,抽象類的子類必須重寫父類的抽象方法,并提供方法體;若沒有重寫全部的抽象方法,仍為抽象類。

5、不能用abstract修飾變量、代碼塊、構造器

6、不能用abstract修飾私有方法、靜态方法、final的方法、final的類

三、示例

四、抽象類應用

抽象類是用來模型化那些父類無法确定全部實作,而是由其子類提供具體實作的對象的類。

例如:在一個航運公司系統中,運輸工具Vehicle類需要定義兩個方法分别計算運輸工具的燃料效率和行駛距離,但是問題是卡車(Truck)和駁船(RiverBarge)的燃料效率和行駛距離的計算方法完全不同,是以Vehicle類不能提供計算方法,但子類可以。

解決方案:将Vehicle定義成一個抽象類,有兩個抽象方法,分别計算燃料效率和行駛距離,這兩個抽象方法的具體實作,則由Vehicle的子類來完成。

五、多态的應用:模闆方法設計模式

抽象類展現的就是一種模闆模式的設計,抽象類作為多個子類的通用模闆,子類在抽象類的基礎上進行擴充、改造,但子類總體上會保留抽象類的行為方式。

解決的問題:

 當功能内部一部分實作是确定的,一部分實作是不确定的。這時可以把不确定的部分暴露出去,讓子類去實作。

 換句話說,在軟體開發中實作一個算法時,整體步驟很固定、通用,這些步驟已經在父類中寫好了。但是某些部分易變,易變部分可以抽象出來,供不同子類實作。這就是一種模闆模式。

示例:

模闆方法設計模式是程式設計中經常用得到的模式,各個架構,類庫中都有他的影子,比如常見的有:

1、資料庫通路的封裝

2、Junit單元測試

3、JavaWeb的Servlet中關于doGet/doPost方法調用

4、Hibernate中模闆程式

5、Spring中JDBCTemplate、HibernateTemplate等