我試圖瞭解如何使用接口的實現和UML中的抽象類的實現。我在https://stackoverflow.com/a/13438187/700543的帖子中發現了這個帖子,其中純粹的虛擬方法是接口,而那些純虛擬方法是抽象類。有人能夠給我一個真實世界的場景,而不是基於代碼的嗎?什麼是UML中的純虛擬方法?
回答
接口只是庫類用戶擴展的「類骨架」,正如你所說的,方法不能實現。一個抽象類可以實現方法。我會給你一個真實的例子:
想象一下,我爲人們提供了一個接口來實現排序功能,並且我還提供了一個用於基準排序功能的類。我的基準標記類只需要知道爲了執行基準標記需要調用什麼接口的方法,它不知道它們是如何實現的。因此,在Bench Benchmark類中,您只能看到像sortInterfaceInstace.getNumberOfSwap()
之類的東西,而sortInterfaceInstance
僅在編譯時是sortInterface
類型,而不是任何特定的用戶排序實現。
如果您需要實現的方法,請使用抽象而不是接口。
謝謝,但我沒有按照你的例子。希望一些基本的例子,例如汽車和它的司機。 – PeanutsMonkey 2013-04-05 01:36:52
界面是一輛汽車的藍圖。抽象類是一輛沒有電機和沒有司機的汽車。如果您按照界面(藍色打印),您可以構建自己的汽車。如果你把汽車放在汽車裏(用一些小孩的課程擴展抽象課程),並且如果你在那裏安置一個駕駛員(例示所述兒童課程),那麼你有一個駕駛汽車的司機。你不能駕駛藍圖,也不能駕駛未完成的汽車。您只能駕駛完成的汽車(通過擴展抽象類或實現接口)。 – 2013-04-06 23:16:48
用藍色打印(實現接口)構建汽車後,如果它是完成的汽車(接口的非抽象實現),也可以驅動該汽車。 – 2013-04-06 23:18:05
一個接口只描述瞭如何使用某些東西,它沒有提供如何完成的底層實現,即只提供純虛函數的類。英文界面的類比可能是一個形容詞。
接口的一個例子是Movable接口。這個接口可以提供一個純虛函數移動,它告訴對象移動到一個給定的位置。但是,它在那裏如何移動尚未實現。
另一方面,抽象類與接口的區別在於它提供了一些實現細節,但不是全部。這些概念上的高級項目可以通過某些方式進行操縱,但是當您深入研究時,高級項目本身並不存在或不合理。
例如,假設我們有一個抽象的Shape類。形狀可以有一定的起源,可以跟蹤它的形狀。可以在Shape類中聲明和實現用於變換形狀的函數,從而節省了必須在每個子類中提供相同實現的麻煩。但是,當您嘗試獲取形狀的面積或周長時,很難在不知道形狀的情況下回答這個問題。
謝謝,但剛剛過去了我的頭。你能給我一個簡單的例子,例如汽車及其司機或語言以及說話的方式英文,法文等? – PeanutsMonkey 2013-04-05 01:35:56
- 1. 帶空虛的虛擬方法和純虛擬方法有什麼區別?
- 2. 使用/不使用虛擬方法實現純虛擬方法?
- 3. 爲什麼這種純虛擬方法不能編譯?
- 4. 在什麼條件下生成純虛擬方法存根?
- 5. 混合純虛擬和虛擬方法的類
- 6. 純虛擬方法調用,終止
- 7. 純虛擬方法VS.函數指針
- 8. 純虛擬方法覆蓋(規則)虛擬方法的效果如何?
- 9. 確定一個方法是否是純虛擬的(C++)
- 10. 模板類中是否允許純虛擬方法?
- 11. 私人純虛擬功能的目的是什麼?
- 12. 如果類也有非虛擬方法,嘲弄純虛擬方法?
- 13. C++純虛方法
- 14. 什麼是虛擬代理?
- 15. 什麼是虛擬內存?
- 16. 虛擬虛擬foo(...)=「0」中的「...」是什麼意思?
- 17. UML中有沒有一種方法來表達「虛擬」用例?
- 18. Java虛擬方法調用的用途是什麼?
- 19. 使方法變爲虛擬的危險是什麼?
- 20. 如何爲虛擬和虛擬純方法使用不同的顏色?
- 21. 什麼是UML
- 22. 虛擬方法
- 23. 沒有虛擬方法的虛擬析構函數有什麼危害嗎?
- 24. 未實現純虛方法
- 25. UML類圖中虛線箭頭的含義是什麼?
- 26. Qt是否支持虛擬純插槽?
- 27. 具有不同數據類型的純虛擬方法
- 28. 什麼是go lang的虛擬繼承?
- 29. 什麼是'='的虛擬鍵碼?
- 30. '虛擬XYZ' VS 'XYZ虛擬' 方法
代碼是現實世界;任何創建UML圖的嘗試幾乎肯定會導致代碼,除非UML圖只是一個探索性練習。 – 2013-04-04 23:33:44
@羅伯特哈維 - 這在我的世界裏大都是探索性的。 – PeanutsMonkey 2013-04-04 23:41:03