詳解接口和抽象類的區別

一:首先要明白什麼是抽象類和接口:

抽象類:抽象類是特殊的類,只是不能被實例化(將定義了一個或多個純虛函數的類稱爲抽象類);除此以外,具有類的其他特性;重要的是抽象類可以包括抽象方法,這是普通類所不能的,但同時也能包括普通的方法。抽象方法只能聲明於抽象類中,且不包含任何實現,派生類必須覆蓋它們。另外,抽象類可以派生自一個抽象類,可以覆蓋基類的抽象方法也可以不覆蓋,如果不覆蓋,則其派生類必須覆蓋它們。雖然不能定義抽象類的實例,但是可以定義它的指針,並且指向抽象類的指針實際上在賦值時是指向其繼承類的實例化對象的,這樣通過統一的使用該指針可以很好的封裝不同子類的實現過程,這在模式設計的過程中得到了極大的應用!

接口:接口是一個概念。它在C++中用抽象類來實現。個人理解,其實接口就是抽象類中定義的虛函數,通過子類的繼承,對基類虛函數進行重寫,在運行的時候,通過基類的指針動態的調用相應子類的實現方法,從而真正意義上實現了多態。

二:抽象類和接口的區別:

(1):首先接口和抽象類的設計目的就是不一樣的。接口是對動作的抽象,而抽象類是對根源的抽象。對於抽象類,比如男人,女人這兩個類,那我們可以爲這兩個類設計一個更高級別的抽象類--人。對於接口,我們可以坐着吃飯,可以站着吃飯,可以用筷子吃飯,可以用叉子吃飯,甚至可以學三哥一樣用手抓着吃飯,那麼可以把這些吃飯的動作抽象成一個接口--吃飯。

(2):抽象類主要是用來抽象類別,接口主要是用來抽象方法功能。當你關注事物的本質的時候,請用抽象類;當你關注一種操作的時候,用接口。

(3):接口中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。

三:抽象類和接口的相同點:

  1. 都可以定義抽象方法
  2. 都不可以實例化對象
  3. 抽象方法都要在子類中重寫(實現),如果不全部重寫,則子類也要定義爲抽象類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章