我已經在stackoverflow上看到很多答案,但我沒有找到與我的匹配的答案。 除了所有這些差異,如果我們說一個抽象類抽象行爲的實現,而一個接口抽象實現行爲的類型,是否有意義。抽象類與設計點的接口有什麼不同?
回答
從設計的角度來看,主要區別是:
- 你可以聲明在實現類的構造函數合同,通過建立在抽象基類中的受保護的構造。
- 您可以通過基類
- 可以使合同周圍的包裝提供的可用方法的實現(例如驗證方法參數)
- 你可以提供一個「呼叫計劃」當您創建調用非抽象方法類型的抽象方法,由派生類實現。這對實現派生類中的算法抽象很有用,而基類實現所有處理邏輯 - 準備和驗證數據,並讓實際處理算法由派生類實現。
所以,我要說你是在該語句正確「的抽象類抽象行爲的實現,而一個接口抽象它實現了行爲的類型」
抽象類:提供必須實施一些方法(你覆蓋抽象類的方法)
接口:只定義了一個合同。表明實現該接口具有的接口方法的類(你實現一個接口)
例如:通過實現對現有類的接口
,你只需要聲明添加界面方法到班級的合同。該類可能已經實現了該接口的所有方法,並且不需要更改現有類中的任何內容。
通過將基本類型更改爲抽象類,即使與類型的抽象方法具有相同名稱的方法已存在,也需要覆蓋所有方法。
不是真的不行,因爲抽象類不需要實現任何行爲。它可能應該,因爲否則你可能會爭論它的用處,但它不必須。
通常,抽象類實現了一些行爲,但留下了一些專門的行爲未實現。
例如,您可能會編寫一個實現網絡應用程序服務器的類,但不會實現流程函數,而是將其留給繼承類來實現。
class MyServer(Networkserver):
// process() is called whenever a client has sent a request
function process(data):
...
通過使類抽象,因此無法被實例化,對於專業化函數不必有某些適當的「默認」行爲。
接口=純抽象類(沒有實現抽象類)
單純從設計的角度,並且是語言無關,接口在類和客戶之間的合同,承諾它做什麼,不是它是如何做到的。這是「編程接口」口頭禪中暗示的用法。
由於像C++這樣的語言沒有接口,抽象類是表示它的唯一方法。對於其中接口是第一類構造的語言,任何一種方式都是可以接受的,並且在選擇中有折衷。當然,語言之間在實現上存在其他技術差異,但我不相信你會問到這些。
有an interview with Erich Gamma,其中他討論了一些差異。
要回答你的問題,我認爲從理論的角度來看是有道理的。從實用的角度來看,它可能取決於你是編程中的語言:)
我一直在尋找一個答案,支持我的論點「不同層次(家庭)的對象可以實現相同的接口,但他們不能有相同的抽象基類「。所以我相信「抽象類抽象行爲的實現,而接口抽象實現行爲的類型」 – somaraj 2010-04-12 08:41:29
兩個有特定用途按語言設計 - 抽象類被設計爲一個基類,不能被實例化。 wheras當u只是需要定義一個合同(沒有實現),每個實現類必須thrie自己的方式跟隨,則u必須使用interfaces.Also -
可以是一個基類繼承
抽象類 - 是的接口 - 無
能有impelementation
抽象類 - 有接口-No
- 1. C#中的抽象類和接口類有什麼不同?
- 2. 類層次結構設計 - 接口+基類與抽象類
- 3. 實現與抽象類的接口時聲明什麼(不)?
- 4. 抽象類MouseAdapter與接口
- 5. 100%抽象類與接口
- 6. 接口與抽象類
- 7. 爲什麼使用接口而不是抽象類與DI?
- 8. 爲什麼接口或抽象類有用? (或爲什麼?)
- 9. 爲什麼在接口爲什麼不能在抽象類
- 10. 接口和抽象類的優點是什麼?
- 11. 接口優於抽象類的優點是什麼?
- 12. 抽象類與代表族的接口
- 13. 接口與抽象類同義,不帶植入w.r.t.固體?
- 14. 爲什麼任何一種抽象都使用接口而不是抽象類?
- 15. 設計與接口的類
- 16. 抽象類難點:繼承從接口
- 17. 什麼時候去接口,什麼時候去抽象類
- 18. 爲什麼我們有抽象類時需要接口?
- 19. 抽象類和接口之間有什麼區別?
- 20. 爲什麼HttpContext是一個抽象類而不是接口?
- 21. 爲什麼java.sql.Statement是一個接口而不是抽象類?
- 22. 這是設計一個好主意 - 接口和抽象類
- 23. 空白接口與普通接口有什麼不同?
- 24. 抽象類或SoftDelete接口
- 25. 抽象類V/s接口
- 26. 純抽象類和接口
- 27. 接口vs 100%抽象類
- 28. PHP抽象類和接口
- 29. 接口或抽象類
- 30. 抽象類和接口
不僅僅是說抽象類可以有實現和接口不能,類可以有很多接口並且只能有一個抽象基類,我覺得不同層次(家庭)的對象可以實現相同的接口,但它們不能具有相同的抽象基類。這就是爲什麼我相信,「一個抽象類抽象行爲的實現,而一個接口抽象實現行爲的類型」 – somaraj 2010-04-12 08:39:12