看到題目的時候,你掌握這個知識點了嗎?

圖檔來源與網絡
常見面試問題如下:
- 接口和抽象類的差別,什麼時候使用?
- 抽象類和接口的相同點和不同點?
總之就是經常問到的問題了。官方文檔有句很逗的話,說給面試官聽,估計很有意思。
Java語言規範
所有的接口都是隐式的抽象聲明。
Abstract class vs Interface
抽象類與接口都是用于功能的抽象。
- 方法: 接口隻能有抽象方法,抽象類可以有抽象方法和非抽象方法。Java8以後,接口可以直接定義default和static方法了。抽象類可以有protect和private方法。
- 成員變量:接口中的成員變量預設是static和final的,抽象類可以像正常的對象一樣定義各種成員變量。可以是非static和final的
- 實作:接口不能實作其他的接口,隻能繼承一個其它的接口。抽象類可以實作多個接口。
- 構造器:抽象類可以有構造器,接口不能有構造器。
- main方法: 抽象類可以有main方法,并且我們可以運作它。接口不能有main方法。
- 速度:抽象類速度更快一些,接口需要時間尋找類中的實作方法。
使用場景
Java8以後可以直接在接口中定義default方法和static方法,如此接口與抽象類之間的差異就小了一些。
抽象類使用場景
- 當你需要定義非靜态和和或final類型的成員變量時,想要修改類中某些成員的狀态的時候。考慮使用抽象類。
- 如果基本功能在不斷改變,那麼就需要使用抽象類。如果不斷改變基本功能并且使用接口,那麼就需要改變所有實作了該接口的類。
- 有時候一個類中全部都是靜态方法,無需執行個體化的類可以考慮使用抽象類
接口使用場景
- 所有的定義的方法必須要實作的時候,完全的抽象考慮使用接口
- 一個類需要實作多于一個的接口。這個也叫做多繼承
最後
解釋一個常見的知識點