022-抽象類與抽象方法

聲明:我的所有文章,都是對網上教學視頻的整理,包括狂神說、尚硅谷、黑馬程序員等等,用來作爲參考資料,無任何商業使用,請廣大網友參考,不喜勿噴,謝謝。(注意,由於網站的原因,有些代碼字符可能會出現問題,建議大家閱讀代碼時,最好和下面的圖片對應來看)
一、抽象類的引入
隨着繼承層次中一個個新子類的定義,類變得越來越具體,而父類則更一般,更通用。類的設計應該保證父類和子類能夠共享特徵。有時將一個父類設計得非常抽象,以至於它沒有具體的實例,這樣的類叫做抽象類。
022-抽象類與抽象方法
二、抽象類與抽象方法的定義
1、用abstract關鍵字來修飾一個類,這個類叫做抽象類
2、用abstract來修飾一個方法,該方法叫做抽象方法,該方法只有方法的聲明,沒有方法的實現,以分號結束,如:public abstract void talk();
3、含有抽象方法的類必須被聲明爲抽象類
4、抽象類不能被實例化,抽象類是用來被繼承的,抽象類的子類必須重寫父類的抽象方法,並提供方法體;若沒有重寫全部的抽象方法,仍爲抽象類。
5、不能用abstract修飾變量、代碼塊、構造器
6、不能用abstract修飾私有方法、靜態方法、final的方法、final的類
三、示例
022-抽象類與抽象方法
四、抽象類應用
抽象類是用來模型化那些父類無法確定全部實現,而是由其子類提供具體實現的對象的類。
例如:在一個航運公司系統中,運輸工具Vehicle類需要定義兩個方法分別計算運輸工具的燃料效率和行駛距離,但是問題是卡車(Truck)和駁船(RiverBarge)的燃料效率和行駛距離的計算方法完全不同,所以Vehicle類不能提供計算方法,但子類可以。
解決方案:將Vehicle定義成一個抽象類,有兩個抽象方法,分別計算燃料效率和行駛距離,這兩個抽象方法的具體實現,則由Vehicle的子類來完成。
五、多態的應用:模板方法設計模式
抽象類體現的就是一種模板模式的設計,抽象類作爲多個子類的通用模板,子類在抽象類的基礎上進行擴展、改造,但子類總體上會保留抽象類的行爲方式。
解決的問題:
 當功能內部一部分實現是確定的,一部分實現是不確定的。這時可以把不確定的部分暴露出去,讓子類去實現。
 換句話說,在軟件開發中實現一個算法時,整體步驟很固定、通用,這些步驟已經在父類中寫好了。但是某些部分易變,易變部分可以抽象出來,供不同子類實現。這就是一種模板模式。
示例:
022-抽象類與抽象方法
模板方法設計模式是編程中經常用得到的模式,各個框架,類庫中都有他的影子,比如常見的有:
1、數據庫訪問的封裝
2、Junit單元測試
3、JavaWeb的Servlet中關於doGet/doPost方法調用
4、Hibernate中模板程序
5、Spring中JDBCTemplate、HibernateTemplate等




























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