Java基礎--接口和抽象類的區別

任何不談使用方法的空理論都是耍流氓html

使用場景

· 若是你擁有一些方法而且想讓它們中的一些有默認實現,那麼使用抽象類吧(Java1.8中接口也能夠這麼作了)java

· 若是你想實現多重繼承,那麼你必須使用接口。因爲Java不支持多繼承,子類不可以繼承多個類,但能夠實現多個接口。所以你就可使用接口來解決它。設計模式

· 若是基本功能在不斷改變,那麼就須要使用抽象類。若是不斷改變基本功能而且使用接口,那麼就須要改變全部實現了該接口的類。架構

具體的使用

· 接口更多的是在系統架構設計方法發揮做用,主要用於定義模塊之間的通訊契約spa

· 而抽象類在代碼實現方面發揮做用,能夠實現代碼的重用。架構設計

例如,模板方法設計模式是抽象類的一個典型應用,假設某個項目的全部Servlet類都要用相同的方式進行權限判斷、記錄訪問日誌和處理異常,那麼就能夠定義一個抽象的基類,讓全部的Servlet都繼承這個抽象基類,在抽象基類的service方法中完成權限判斷、記錄訪問日誌和處理異常的代碼,在各個子類中只是完成各自的業務邏輯代碼設計

總結:日誌

抽象類和接口的不一樣點主要存在在三個方面:htm

· 默認實現繼承

· 多重繼承

· 需求穩定性

具體細節

參數

抽象類

接口

默認的方法實現

它能夠有默認的方法實現

接口徹底是抽象的。它根本不存在方法的實現(java1.8能夠實現了)

實現

子類使用extends關鍵字來繼承抽象類。若是子類不是抽象類的話,它須要提供抽象類中全部聲明的方法的實現。

子類使用關鍵字implements來實現接口。它須要提供接口中全部聲明的方法的實現

構造器

抽象類能夠有構造器

接口不能有構造器

與正常Java類的區別

除了你不能實例化抽象類以外,它和普通Java類沒有任何區別

接口是徹底不一樣的類型

訪問修飾符

抽象方法能夠有publicprotecteddefault這些修飾符

接口方法默認修飾符是public。你不可使用其它修飾符。

main方法

抽象方法能夠有main方法而且咱們能夠運行它

接口沒有main方法,所以咱們不能運行它。

多繼承

抽象方法能夠繼承一個類和實現多個接口

接口只能夠繼承一個或多個其它接口

速度

它比接口速度要快

接口是稍微有點慢的,由於它須要

時間去尋找在類中實現的方法。

添加新方法

若是你往抽象類中添加新的方法,你能夠給它提供默認的實現。所以你不須要改變你如今的代碼。

若是你往接口中添加方法,那麼你必須改變實現該接口的類(有時感受接口的這個特色特別煩)

其餘

參數

抽象類

接口

普通方法

默認爲 public abstract

靜態方法

能夠有

不能有

普通成員變量

能夠有

不能有

靜態成員變量

能夠有,修飾符任意

能夠有隻能是 public static final

參考資料

http://www.importnew.com/12399.html

相關文章
相關標籤/搜索