一、區別
抽象類(abstract) | 接口(interface) | |
---|---|---|
實現 | × | √ |
繼承 | √ | × |
能實例化 | × | × |
實現或繼承使用的關鍵字 | extends | implements |
實現或繼承的類叫做 | 子類 | 類 |
可以多繼承或多實現 | × | √ |
方法聲明 | √ | √ |
方法實現 | √ | × |
方法的標識符 | punlic、private、protected | public |
實現抽象方法 | √ | √ |
變量 | 普通變量 | 靜態不可修改常量 |
作用 | 重構 | 設計 |
側重點 | 抽象類別 | 抽象功能 |
可以有構造方法 | √ | × |
注意:
- 接口的方法也是可以實現的,但是需要加上final標識符
- 如果在接口中定義一個成員變量的話,默認會加上public static final
二、使用場景
接口
- 不關注方法的實現邏輯。只是對方法做一個規範,並不關心它的實現邏輯。
- 有一系列有類似功能的類。定義一個接口,統一管理這些類的實現,在使用的時候,只需要通過一個接口就可以獲取這些類。
抽象類
- 需要抽象方法和實現方法共存。
- 存在方法或變量需要共享。
三、總結
抽象類更像一個類的樹幹,而接口就像一個類的樹枝。
樹枝可以有千萬條,但是樹幹只能有一個。
在java中,所有的類最終都是繼承與Object,我們可以用一個類來繼承Object後提供給其它類繼承。