根據不同的語法和可以使用的地方,它們看起來都非常密切。主要區別是什麼?抽象和虛擬相同的含義?
2
A
回答
7
抽象意味着派生類被迫實現它,而虛擬這不是這種情況(它可以但不是必需的)。這源於這樣一個事實,即一個抽象方法在虛擬方法中沒有關聯主體。
0
通過將成員定義爲抽象,您正在定義一種佔位符,而不提供任何默認實現。任何與基類交互的客戶端代碼仍然可以引用抽象佔位符成員,在知道實例的具體類必須提供具體實現的情況下是安全的。
通過將成員定義爲虛擬,可以啓用派生類來提供一個將覆蓋基類的實現。區別在於,如果派生類不提供自己的實現,則將使用基類中的實現。
考慮下面的C#示例類:
abstract class TaskBase {
public abstract void RunTask();
}
class RoadNetwork {
public string GetCorrectSideToDriveOn() { return "left"; }
}
的TaskBase
類的設計迫使派生類中提供自己的執行RunTask()
因爲代碼不會沒有它編譯。設計師有效地說:「任務必須可以運行,但您必須提供實施,因爲沒有有意義的默認設置。」
的RoadNetwork
類的設計原理不同:人誰實現了RoadNetwork
會自動使用道路的正確一邊開車,除非他們專門選擇開車在錯誤的一邊;)
相關問題
- 1. 虛擬和抽象方法
- 2. 在SystemVerilog中,虛擬類是否與抽象類相同?
- 3. C#虛擬/抽象領域#
- 4. Moq,抽象類和虛擬屬性
- 5. 類既抽象和虛擬方法
- 6. 抽象和虛擬有什麼區別?
- 7. 只有虛擬抽象方法的接口和抽象類是相同的東西嗎?
- 8. 虛擬類中的抽象方法
- 9. 抽象方法是虛擬的嗎?
- 10. 泄漏抽象的含義?
- 11. C++,變量,抽象/虛擬類
- 12. 抽象方法聲明 - 虛擬?
- 13. C#虛擬(或抽象)靜態方法
- 14. 使用虛擬類型(抽象類型)
- 15. 虛擬成員調用抽象類
- 16. 抽象和虛函數
- 17. C++中的抽象類和純虛擬方法
- 18. C++中虛擬類和抽象類的用法
- 19. 非虛擬的非抽象方法導致「c#虛擬或抽象成員不能私有」
- 20. 關於基類VS抽象方法的虛擬虛方法
- 21. 虛擬繼承和虛函數是否使用相同的vtable?
- 22. 相同類中的虛擬方法vs非虛擬方法
- 23. 抽象類:無效的抽象的返回類型爲成員函數「虛擬...」
- 24. 命名約定非虛擬和抽象方法
- 25. C++ - 抽象類和替代虛擬構造
- 26. 抽象類和虛擬方法 - 顯示總數
- 27. '非虛擬界面'和'抽象界面'有什麼區別?
- 28. 使用虛擬方法的靜態抽象對象
- 29. 如何測試在一個抽象類定義的虛擬方法?
- 30. 訂購虛擬的,抽象的,覆蓋關鍵字
你可以作爲去至於說抽象方法也是一種(特殊的)虛擬方法。 – GolezTrol 2011-01-06 09:50:10