java抽象類abstract和介面interface的區別
抽象類 介面
定義關鍵字 abstract interface
子類繼承或實現關鍵字 extends implement
方法實現 可以有 不能有但是在jdk8以後可以有default實現
方法訪問控制符 無限制 有限制預設是 public abstract 型別
屬性訪問控制符 無限制 有限制 預設是 public static final 型別
靜態方法 可以有 不能有
static靜態程式碼塊 可以有 不能有
本型別之間擴充套件 單繼承 多繼承
本型別之間擴充套件關鍵字 extends extends
抽象類在被繼承之間體現的是is-a的關係,介面與被實現之間體現的是can-do的關係
抽象類是模板設計 而介面更像契約式設計
介面是頂級“類” 編譯之後還是.class檔案
介面某種意義上位於頂層,而抽象類更多對各個介面進行組合,然後實現部分介面行為
介面和抽象類選擇猶豫時推薦定義介面,遵循介面隔離原則