2016-09-20 66 views
0

我一直在研究高級OOP的主題,我發現自己一遍又一遍地提出一個問題......爲什麼在子類中定義所有方法時使用抽象類。孩子類不能獨立於抽象類而使用,而不會造成問題?爲什麼使用抽象類

+1

「爲什麼在子類中定義所有方法時使用抽象類」您告訴我們爲什麼要這麼做。 – PeeHaa

+0

https://it.wikipedia.org/wiki/Abstract_factory – scaisEdge

+0

因爲你可以重寫你的類中的抽象方法,如果它應該做別的事情,而另一個100方法是相同的?順便說一句,這可能會幫助你:http://programmers.stackexchange.com/questions/173518/what-are-the-differences-between-abstract-classes-interfaces-and-when-to-use-t – adaliszk

回答

0
爲什麼使用抽象類

有些人可能認爲這是一個很好的解決方案,但抽象類有助於遵循DRY principle而接口不幫你這個問題。然而,這需要付出代價(例如,基類實現的更改可能會破壞擴展它的類),並且如果可能的話,通常應該更喜歡使用接口。

孩子類不能獨立於抽象類使用而不會導致問題?

擴展一個特定的前輩讓你能夠使不同的類擴展它是可以互換的。

假設你需要一隻任何種類的小鳥。鴨子和母雞延長小鳥的事實意味着你會接受母雞和鴨子。你可能會說你只需要飛翔的鴿子,這意味着你不會再接受母鴿(可以跳但不能飛),但會繼續接受鷹。但是如果你說你需要一隻鴨子 - 這意味着你需要一隻鴨子,並且不會接受任何其他種類的鳥類。類擴展另一個類(抽象或非抽象)或接口的事實將允許您將它作爲參數傳遞給期望基類實例的函數。

+0

您整個的最後一段是關於接口而不是抽象類。 – PeeHaa

+1

其實我甚至都不明白你在說什麼:P – PeeHaa

0

當你需要在基類中實現某些東西時,你可以使用抽象類,而子類應該在同一個方法中實現另一個邏輯。例如,我們需要實現服務,解析不同類型的文件:

  • 我們有一個基類,設置文件名,方法將數據存儲到數據庫和抽象方法 - 這在解析文件
  • 我們XLS,XLSX和CSV文件的實現,對於方法過程有不同的實現。

這是一個很好的解決方案。但這並不意味着你應該這樣使用。您可以實現其中一種模式或根本不使用OOP。這只是一種如何實現邏輯的方法。

+0

我認爲存儲和解析是兩個不同的責任,不應該在同一個類中完成。 – PeeHaa

相關問題