聯系很明顯,三個都是‘類’,如果讀者對類的概念不清楚,可以參照wid的博文http://www.cnblogs.com/mr-wid/archive/2013/02/18/2916309.html。
下面着重解釋一下區別,但此文僅是個人理解,如果覺得我說的不對的地方,還請賜教。
(1)結構上的區別:
普通類:數據+方法+實現
抽象類:數據+方法(一定包含虛方法n>=1)+部分方法的實現
接口類:方法(純虛方法)
(2)概念上的區別:
普通的類和另外兩個的區別很明顯,普通類就是貓狗之類的,而抽象類就是動物類。但接口類與抽象類的區別不太明顯,下面就說說這兩個類。
接口類算是從抽象類中分離出來的特殊的抽象類(純虛方法且不含數據的抽象類),抽象類側重點在‘類’的角度上,而接口類則側重於‘方法’。引用《大話設計模式》中的一句話就是,“類是對對象的抽象,抽象類是對類的抽象,而接口是對行為的抽象。”
舉個例子,貓、狗類(普通的具體類)繼承於動物類(抽象類),而貓、狗類又有共同的‘吃飯’的行為,這時,我們就可以寫一個‘吃飯’的接口類,讓貓、狗類繼承並實現這個方法。
抽象類是從子類中發現公共的東西泛化出父類,從而讓子類繼承父類,但是你寫接口類的時候不一定知道子類的存在,但就如‘吃飯’一樣,肯定都是要的,只是具體的子類如何實現就要看子類是啥了,貓吃魚、狗啃骨頭,具體‘吃飯’的方法在子類中實現。
看《大話設計模式》時總結出來的,如果還不理解,可以直接去看那本書附錄A。
