抽象類是用來捕捉子類的通用特性的。接口是抽象方法的集合。
從設計層面來說,抽象類是對類的抽象,是一種模板設計,接口是行為的抽象,是一種行為的規范。
相同點
接口和抽象類都不能實例化都位于繼承的頂端,用于被其他實現或繼承都包含抽象方法,其子類都必須覆寫這些抽象方法
不同點
備注:Java8中接口中引入默認方法和靜態方法,以此來減少抽象類和接口之間的差異。
現在,我們可以為接口提供默認實現的方法了,并且不用強制子類來實現它。
接口和抽象類各有優缺點,在接口和抽象類的選擇上,必須遵守這樣一個原則:
行為模型應該總是通過接口而不是抽象類定義,所以通常是優先選用接口,盡量少用抽象類。選擇抽象類的時候通常是如下情況:需要定義子類的行為,又要為子類提供通用的功能。