如果在派生類中您可以同時覆寫抽象父類的具體方法和抽象方法,那么首先擁有抽象方法有什么意義呢?
例如,如果在父類中有一個名為“display”的具體方法,它只列印“hi from the base class”,可以在派生類中重寫以列印“hi from the derived class”,有什么區別如果父級中的“顯示”方法是抽象的而不是具體的?在任何情況下它都會被覆寫。
uj5u.com熱心網友回復:
區別很簡單:必須重寫抽象方法。當您有一個非抽象(虛擬)方法時,您可以決定不想在派生類中覆寫它。所以基類的程式員可以決定派生類是必須重寫方法還是可以重寫方法。
C# 和 java 在“可覆寫性”的默認值方面有所不同。在java中,方法默認是虛擬的并且可以被覆寫,在C#中,默認是方法不是虛擬的,除非明確宣告。但是兩種語言都有所有三個概念:抽象方法(這些必須被覆寫)、虛擬方法(這些可以被覆寫)和最終/密封方法(這些不能被覆寫)。
uj5u.com熱心網友回復:
如果您的意思是基類中的abstract方法和virtual方法之間的區別:區別只是必須abstract重寫一個,即沒有有意義的基本實作,并且必須提供自定義實作以使型別有效-而如果繼承者愿意,可以選擇重寫方法。virtual
uj5u.com熱心網友回復:
當并非所有方法都可以以默認方式實作時,您可以使用抽象類。例如作為基類的 Shape 類和派生的 Rectangle 和 Circle。最后兩個將實作 Draw 方法,但父/基類在 Draw 方法中應該做什么?
如果方法具有默認實作,則使用虛擬,如果沒有,則使用抽象。
uj5u.com熱心網友回復:
正如PMF所提到的,抽象方法必須被覆寫,而具體方法可以被覆寫。
還必須在層次結構的背景關系中理解差異,其中一個抽象類可以由多個其他類(的父類)擴展。
抽象類中的具體方法定義提供了一個默認實作,該實作通常被許多子類實作所接受,但也可以在需要不同實作的情況下被覆寫。
但是抽象方法必須始終被所有子類覆寫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/428607.html
