1. 程式人生 > >接口和抽象類 分析總結

接口和抽象類 分析總結

普通 上層 屬於 而是 帶來 nbsp 操作 成員變量 構造器

相似:

1、接口和抽象類都是繼承樹的上層。
2、都不可被實例化。
3、都能包含抽象的方法。
4、接口可以認為是一種特殊形式的抽象類。


區別:
1、接口是對動作的抽象【定義】可以被認為是一組規則的集合,抽象類是對相似類的抽象【定義】。
2、接口中的方法,只能是抽象方法。抽象類中,可以有抽象方法,也可以有普通方法【有具體行為的方法、非抽象方法】。
3、定義抽象類是為了代碼復用,定義接口是為了實現多態。【從動機上看】
4、子類可有實現多個接口,但只能繼承子一個父類【抽象類】。
5、接口中只能定義靜態常量【基本數據類型為static】,抽象類中可以定義普通成員變量,也可以定義靜態常量。
6、接口不能包含構造器,抽象類可以包含構造器【抽象類裏的構造器並不是用於創建對象,而是讓其子類調用這些構造器來完成屬於抽象類的初始化操作】。

抽象方法【接口方法也可以被看作是抽象方法】:
1、只聲明,不實現。
2、抽象方法,只能存在於抽象類【接口】中,抽象類中可以沒有抽象方法。
3、子類必須實現抽象方法【接口方法】,抽象類繼承抽象類【接口】,可以不實現。
4、抽象方法,不能是靜態的、私有的。


應用分析:
1、抽象類的功能要大於接口,所以定義抽象類的代價高。
2、抽象類中可以存在非抽象方法,能夠保證實現的層次關系,可以避免子類中存在重復代碼,重在代碼復用。
3、定義抽象類,要編寫出可能存在的子類的所以共性。接口只針對動作,在設計階段會降低難度。
4、對於已經存在的結構,我們可以很方便的從類中抽象出新的接口,但要從類中抽象出抽象類,難度會增大。
5、如果依賴抽象類來定義行為,往往導致過於復雜的繼承關系,而通過接口定義行為能 夠更有效地分離行為與實現,為代碼的維護和修改帶來方便。

註:該篇文章,參考了多本書籍以及網上的參考信息。再此就不全部列舉了。

接口和抽象類 分析總結