Java之路:抽象類與介面對比
阿新 • • 發佈:2018-12-08
先上圖:
下面詳細說下:
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"關係。