回答
是虛擬方法有身體和抽象只是一個簽名????
沒錯。的一點是,虛擬方法可以在派生類中重寫,而抽象方法必須被重寫。同樣,至少有一個抽象方法的類本身必須是抽象的,即它不能直接實例化,因爲它的實現(部分)缺失。
最後,每一個抽象方法是也虛擬暗示。基本上只是意味着該方法在運行時被分派到正確的類,因此可以被重寫以實現運行時多態性。
由於抽象方法必須被覆蓋,它們實際上是一個像接口和代碼一樣的契約,除非你正確地實現它們,所以它是讓你的代碼的用戶實現他們必須實現的代碼的一種方式,特別是如果他們懶惰,對嗎? – Xaisoft 2012-07-19 18:44:39
@ Xaisoft正確,但是虛擬(非抽象)方法也構成一個契約,因爲契約是從使用類(=客戶端)的角度來看的。重要的是客戶可以使用它所宣傳的類的功能。 – 2012-07-19 19:03:21
我同意,但我的意思是,如果你聲明一個虛擬的方法,客戶端即使他們應該也不必實現它。另外一個虛擬方法可以有默認行爲。客戶必須實現一個抽象方法,它不能具有默認行爲。如果你真的想要實施一種方法並將責任放在客戶端上,似乎你抽象路線與虛擬路線相比的唯一原因是。 – Xaisoft 2012-07-19 19:32:52
抽象意味着你必須覆蓋它。虛擬意味着你可以覆蓋它。或多或少。
此外:使用類中的抽象方法,您的整個類將是抽象的,這意味着您不能創建此類的實例,只能創建派生的非抽象子類。 – dbemerlin 2010-03-16 13:40:18
我同意在這裏兩個答案,所以我就不再贅述了。但是這裏有一個可能有用的鏈接。
- 1. '非虛擬界面'和'抽象界面'有什麼區別?
- 2. 並行和虛擬有什麼區別
- 3. 抽象類和Mixin有什麼區別?
- 4. 抽象和封裝有什麼區別?
- 5. 繼承時抽象類和非抽象類有什麼區別
- 6. 抽象與外觀有什麼區別?
- 7. 帶空虛的虛擬方法和純虛擬方法有什麼區別?
- 8. 覆蓋非虛擬功能和虛擬功能有什麼區別?
- 9. 虛擬機經典和虛擬機在天藍色之間有什麼區別?
- 10. Java客戶端虛擬機和服務器虛擬機有什麼區別?
- 11. 虛擬和抽象方法
- 12. 硬件和硬件輔助虛擬化有什麼區別?
- 13. 虛擬變量和單熱編碼有什麼區別?
- 14. Full,Para和硬件輔助虛擬化有什麼區別?
- 15. 提交和鎖定虛擬內存有什麼區別?
- 16. 網站和虛擬目錄有什麼區別
- 17. 個人和虛擬主機證書存儲有什麼區別?
- 18. 動態和虛擬方法有什麼區別?
- 19. DbSet <>和虛擬DbSet <>有什麼區別?
- 20. 非虛擬方法和密封方法有什麼區別?
- 21. Azure虛擬機和雲服務之間有什麼區別
- 22. 解析樹和抽象語法樹有什麼區別?
- 23. 抽象類和接口之間有什麼區別?
- 24. DBpedia中的抽象和評論有什麼區別
- 25. 抽象類和靜態類之間有什麼區別?
- 26. 抽象類和繼承之間有什麼區別?
- 27. 具體RTN和抽象RTN有什麼區別?
- 28. 「抽象解析樹」和「解析樹」有什麼區別?
- 29. 界面和抽象類有什麼區別?
- 30. 繼承和抽象類有什麼區別?
順便說一句,部分方法,相比於抽象方法,使您可以創建一個沒有不需要被重寫的實現方法。 – Brian 2010-03-16 13:43:56