聯絡很明顯,三個都是『類』,如果讀者對類的概念不清楚,可以參照wid的博文
下面著重解釋一下區別,但此文僅是個人理解,如果覺得我說的不對的地方,還請賜教。
(1)結構上的區別:
普通類:資料+方法+實現
抽象類:資料+方法(一定包含虛方法n>=1)+部分方法的實現
介面類:方法(純虛方法)
(2)概念上的區別:
普通的類和另外兩個的區別很明顯,普通類就是貓狗之類的,而抽象類就是動物類。但介面類與抽象類的區別不太明顯,下面就說說這兩個類。
介面類算是從抽象類中分離出來的特殊的抽象類(純虛方法且不含資料的抽象類),抽象類側重點在『類』的角度上,而介面類則側重於『方法』。引用《大話設計模式》中的一句話就是,「類是對物件的抽象,抽象類是對類的抽象,而介面是對行為的抽象。」
舉個例子,貓、狗類(普通的具體類)繼承於動物類(抽象類),而貓、狗類又有共同的『吃飯』的行為,這時,我們就可以寫乙個『吃飯』的介面類,讓貓、狗類繼承並實現這個方法。
抽象類是從子類中發現公共的東西泛化出父類,從而讓子類繼承父類,但是你寫介面類的時候不一定知道子類的存在,但就如『吃飯』一樣,肯定都是要的,只是具體的子類如何實現就要看子類是啥了,貓吃魚、狗啃骨頭,具體『吃飯』的方法在子類中實現。
看《大話設計模式》時總結出來的,如果還不理解,可以直接去看那本書附錄a。
類 抽象類 介面 三者的異同,分別的用法
類 抽象類 介面三者的異同 1.定義 類 是例項的模板 抽象類 只宣告具體的介面 方法簽名 而不完成具體的實現 介面 乙個方法的集合吧,裡面擁有多個方法 我的理解 2.其他 1.抽象類不能被例項化,只可以用來繼承作為其他類的父類存在 而普通類可以被例項化 2.抽象類和普通類的繼承是單繼承,而介面的繼...
介面類與抽象類的區別
介面和抽象類有什麼區別 你選擇使用介面和抽象類的依據是什麼?介面和抽象類的概念不一樣。介面是對動作的抽象,抽象類是對根源的抽象。抽象類表示的是,這個物件是什麼。介面表示的是,這個物件能做什麼。比如,男人,女人,這兩個類 如果是類的話 他們的抽象類是人。說明,他們都是人。人可以吃東西,狗也可以吃東西,...
php 介面類與抽象類的區別
一 抽象類abstract class 1 抽象類是指在 class 前加了 abstract 關鍵字且存在抽象方法 在類方法 function 關鍵字前加了 abstract 關鍵字 的類。2 抽象類不能被直接例項化。抽象類中只定義 或部分實現 子類需要的方法。子類可以通過繼承抽象類並通過實現抽象...