1. 程式人生 > >Java之路:抽象類與介面對比

Java之路:抽象類與介面對比

先上圖:
在這裡插入圖片描述
下面詳細說下:

1、相同點

(1)都是抽象型別;

(2)都可以有實現方法;抽象類中可以實現普通方法,介面中可以實現預設方法(Java 8)。

(3) 都可以不需要實現類或者繼承者去實現所有方法。(以前不行,現在介面中預設方法不需要實現者實現)

2、不同點

(1)抽象類中可以有常量(final)、全域性常量(public static final)和變數,而介面中只能有全域性常量(public static final);

介面中定義的變數預設是public static final 型,且必須給其初值,所以實現類中不能重新定義,也不能改變其值;抽象類中的變數預設是 friendly 型,其值可以在子類中重新定義,也可以重新賦值。

(2)抽象類許可權可以使用各種許可權,而介面中只能使用public

(3)介面中不能含有靜態程式碼塊以及靜態方法,而抽象類可以有靜態程式碼塊和靜態方法;

(4)抽象類的子類可以通過extends關鍵字繼承一個抽象類;介面的子類可以通過implements關鍵字實現多個介面。

(5)一個抽象類可以實現多個介面,而介面不能繼承抽象類,但可以繼承多個介面。

(6) 抽象類和介面所反映出的設計理念不同。其實抽象類表示的是"is-a"關係,介面表示的是"like-a"關係。