1. 程式人生 > >抽象類abstract class和介面interface對比

抽象類abstract class和介面interface對比

abstract和interface是Java語言中對於抽象類定義進行支援的兩種機制,正式由於這兩種機制的存在,才賦予了Java強大的面向物件的能力。

區別 抽象類abstract 介面interface
定義語法 abstract class 類名稱 interface介面名稱
組成 常量,全域性常量,變數,構造方法,普通方法,抽象方法 全域性常量,抽象方法,預設方法
許可權 可以是各種許可權 都是public許可權
使用 子類通過extend繼承一個抽象類 子類通過implements實現多個介面
關係 一個抽象類可以實現多個介面 一個介面不能繼承抽象類,但可以繼承多個介面
侷限 只能單繼承 可以多繼承

通過上面的表格可以發現二者的不同點:
1、abstract抽象類不可以多重繼承,介面可以
2、抽象類和介面所反映的設計理念不同,抽象類表示的是"is-a"的關係,介面表示的是"like-a"的關係
3、介面中定義的變數預設是public static final型別切必須給其初值,所以實現類中不能重新定義,也不能改變其值。抽象類中的變數預設是friendly型,其值可以在子類中重新定義,也可以重新賦值。

總的來說,抽象類和介面在很大程度上都是可以互相替換使用的,但就是由於抽象類本身具備單繼承侷限性,所以當抽象類和介面全部都可以使用的時候優先考慮介面,因為介面沒有單繼承侷限性,並且在Java8中介面可以設定預設方法,在一定程度上避免程式碼重複,利於後期的維護。