我一直在研究高級OOP的主題,我發現自己一遍又一遍地提出一個問題......爲什麼在子類中定義所有方法時使用抽象類。孩子類不能獨立於抽象類而使用,而不會造成問題?爲什麼使用抽象類
Q
爲什麼使用抽象類
0
A
回答
0
爲什麼使用抽象類
有些人可能認爲這是一個很好的解決方案,但抽象類有助於遵循DRY principle而接口不幫你這個問題。然而,這需要付出代價(例如,基類實現的更改可能會破壞擴展它的類),並且如果可能的話,通常應該更喜歡使用接口。
孩子類不能獨立於抽象類使用而不會導致問題?
擴展一個特定的前輩讓你能夠使不同的類擴展它是可以互換的。
假設你需要一隻任何種類的小鳥。鴨子和母雞延長小鳥的事實意味着你會接受母雞和鴨子。你可能會說你只需要飛翔的鴿子,這意味着你不會再接受母鴿(可以跳但不能飛),但會繼續接受鷹。但是如果你說你需要一隻鴨子 - 這意味着你需要一隻鴨子,並且不會接受任何其他種類的鳥類。類擴展另一個類(抽象或非抽象)或接口的事實將允許您將它作爲參數傳遞給期望基類實例的函數。
0
當你需要在基類中實現某些東西時,你可以使用抽象類,而子類應該在同一個方法中實現另一個邏輯。例如,我們需要實現服務,解析不同類型的文件:
- 我們有一個基類,設置文件名,方法將數據存儲到數據庫和抽象方法 - 這在解析文件
- 我們XLS,XLSX和CSV文件的實現,對於方法過程有不同的實現。
這是一個很好的解決方案。但這並不意味着你應該這樣使用。您可以實現其中一種模式或根本不使用OOP。這只是一種如何實現邏輯的方法。
+0
我認爲存儲和解析是兩個不同的責任,不應該在同一個類中完成。 – PeeHaa
相關問題
- 1. 爲什麼接口或抽象類有用? (或爲什麼?)
- 2. 爲什麼要使用抽象接口?
- 3. 爲什麼要使用抽象工廠
- 4. 爲什麼任何一種抽象都使用接口而不是抽象類?
- 5. 爲什麼我們在java中使用抽象類和抽象方法
- 6. 爲什麼需要抽象類?
- 7. 爲什麼需要抽象類?
- 8. 爲什麼HttpServletRequestWrapper類不是抽象的
- 9. 爲什麼ClassLoader是一個抽象類?
- 10. 這是爲什麼抽象類在PHP
- 11. 「抽象類沒有參數」:爲什麼?
- 12. 什麼是抽象類型?
- 13. 爲什麼你需要知道抽象類的抽象方法是否抽象
- 14. 使用抽象類中抽象類的引用抽象類c
- 15. 爲什麼在接口爲什麼不能在抽象類
- 16. 爲什麼使用方法局部抽象內部類
- 17. 爲什麼在使用TStream類時會出現「抽象錯誤」?
- 18. 爲什麼在Julia中使用抽象類型關鍵字?
- 19. 繼承時抽象類和非抽象類有什麼區別
- 20. 爲什麼我的子類被認爲是一個抽象類?
- 21. 何時使用接口和什麼時候使用抽象類
- 22. 使用抽象類
- 23. 爲抽象類
- 24. 使用分部類而不是抽象類有什麼好處?
- 25. 爲什麼我們使用接口和抽象類,在什麼情況下應該使用abract類和接口
- 26. 什麼非抽象空洞的方法,抽象類
- 27. 什麼是抽象類和抽象方法?
- 28. 爲什麼將doGet抽象爲processRequest?
- 29. 爲什麼對象類不是抽象的?
- 30. 爲什麼一個類叫做對象的抽象?
「爲什麼在子類中定義所有方法時使用抽象類」您告訴我們爲什麼要這麼做。 – PeeHaa
https://it.wikipedia.org/wiki/Abstract_factory – scaisEdge
因爲你可以重寫你的類中的抽象方法,如果它應該做別的事情,而另一個100方法是相同的?順便說一句,這可能會幫助你:http://programmers.stackexchange.com/questions/173518/what-are-the-differences-between-abstract-classes-interfaces-and-when-to-use-t – adaliszk