前提背景在面試到
Java
基礎(chǔ)知識的時候,總喜歡問抽象類
和接口
的區(qū)別,在這里記錄一下自己復(fù)習(xí)的筆記
抽象類 abstract class
在面向?qū)ο蟮母拍钪校械膶ο蠖际峭ㄟ^類來描繪的,但是反過來罗岖,并不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象蓖康,這樣的類就是抽象類科贬。
- 使用
abstract
修飾的類 - 不直接可以
實例化
- 內(nèi)部可以聲明
abstract
修飾的方法(只有方法頭,沒有方法體) - 內(nèi)部也可以聲明普通的成員方法(包含方法頭,和方法體)
思考:
抽象類內(nèi)部是不是必須要有抽象方法呢?不是必須!
抽象方法是不是必須聲明在抽象類內(nèi)部呢?必須的!
接口 interface
- 使用
interface
修飾的類 - 不直接可以
實例化
- 內(nèi)部只能聲明
public abstract
方法 (只有方法頭,沒有方法體,public abstract
聲明可以不寫,因為默認)
區(qū)別與聯(lián)系
- 區(qū)別
- 抽象類中
可以有
普通的成員方法,接口只有
抽象方法 - 抽象類中的方法可以有
public
,private
,protected
修飾方法,接口只有public
- 抽象類可以有構(gòu)造器,接口沒有構(gòu)造器,
抽象類依然是屬于類的范疇
,(抽象類如果定義了含有參數(shù)的構(gòu)造函數(shù)
Parent(int a)
,子類集成時必須
在構(gòu)造函數(shù)中顯式調(diào)用父類
的改構(gòu)造器進行初始化super(a)
) -
Java
中只能集成一個類,可以實現(xiàn)多個接口
- 抽象類中
- 聯(lián)系
- 接口聲明能力,抽象類提供默認的實現(xiàn),在編碼時可以選擇全部重寫還是部分重寫來實現(xiàn)自己的邏輯,例如
Collection接口和對應(yīng)的AbstractCollection抽象類
- 接口聲明能力,抽象類提供默認的實現(xiàn),在編碼時可以選擇全部重寫還是部分重寫來實現(xiàn)自己的邏輯,例如
其他思考
- 抽象類的意義
- 對實現(xiàn)其的子類一種強制規(guī)范,子類必須實現(xiàn)抽象父類的所有抽象方法