1.抽象類的特點:
包含至少一個以abstract表示的沒有實作的方法——抽象方法,來代表父類中的可變方法。當然抽象類可以提供實作的具體方法。 包含的有具體實作的方法來代表父類中的不可變的通用方法。 不能被執行個體化。 子類繼承時必須實作去所有抽象方法,否則子類也是一個抽象類,不能被執行個體化。這樣的設計是使得方法簽名上保持持續性。(方法簽名是指:方法的名稱,參數的數量和參數的類型這三部分,不包含傳回類型。可以通過不同的方法簽名來重載一個方法。) 也就是說,抽象類設定了一個契約,子類必須完成這個契約所規定的部分。
2.模式UML:

3.例子:
省略
注意:
1)Java不支援多繼承,是以使用繼承的原則是首選接口,簡潔為上,也就是說隻在必須使用的時候使用繼承,除非要實作的方法中太多是确定的。因為接口的使用也有弊病,由于接口中的方法并不實作,這就意味着每一個對接口的直接實作都要顯式的實作所有接口中聲明的方法,即使這個方法對于所有的接口實作者都是不變固定的。
2)結合這兩種基本模式,我們就能得到一個經典模式——預設适配模式。聲明類型的工作仍然由Java接口承擔,但是同時給出一個Java 抽象類,且實作了這個接口,而其他同屬于這個抽象類型的具體類可以選擇實作這個Java接口,也可以選擇繼承這個抽象類,也就是說在層次結構中,Java 接口在最上面,然後緊跟着抽象類,這将兩個的最大優點都能發揮到極至了。在Java語言API中用了這種模式,而且全都遵循一定的命名規範:Abstract +接口名。
3)在繼承上遵循以下原則:使用Java接口和抽象Java類進行變量的類型聲明、參數是類型聲明、方法的返還類型說明,以及資料類型的轉換等。而不要用具體Java類進行這些。如果你準備寫一個具體類去繼承另一個具體類的話,那你的設計就有很大問題了。
4)抽象類可以完成這樣的一種需求:在功能中必須完成某一個邏輯,但是在子類中該功能的具體定義中除了這段邏輯外又有所不同。
參考文獻:
<a href="http://www.cnblogs.com/fanqimeng/archive/2009/05/13/1456183.html">http://www.cnblogs.com/fanqimeng/archive/2009/05/13/1456183.html</a>