2010-03-16 140 views
6

抽象和虛擬都將被子類覆蓋比什麼是差異。抽象和虛擬有什麼區別?

是虛擬方法有身體和抽象只是一個簽名????

+0

順便說一句,部分方法,相比於抽象方法,使您可以創建一個沒有不需要被重寫的實現方法。 – Brian 2010-03-16 13:43:56

回答

24

是虛擬方法有身體和抽象只是一個簽名????

沒錯。的一點是,虛擬方法可以在派生類中重寫,而抽象方法必須被重寫。同樣,至少有一個抽象方法的類本身必須是抽象的,即它不能直接實例化,因爲它的實現(部分)缺失。

最後,每一個抽象方法是虛擬暗示。基本上只是意味着該方法在運行時被分派到正確的類,因此可以被重寫以實現運行時多態性。

+0

由於抽象方法必須被覆蓋,它們實際上是一個像接口和代碼一樣的契約,除非你正確地實現它們,所以它是讓你的代碼的用戶實現他們必須實現的代碼的一種方式,特別是如果他們懶惰,對嗎? – Xaisoft 2012-07-19 18:44:39

+0

@ Xaisoft正確,但是虛擬(非抽象)方法也構成一個契約,因爲契約是從使用類(=客戶端)的角度來看的。重要的是客戶可以使用它所宣傳的類的功能。 – 2012-07-19 19:03:21

+1

我同意,但我的意思是,如果你聲明一個虛擬的方法,客戶端即使他們應該也不必實現它。另外一個虛擬方法可以有默認行爲。客戶必須實現一個抽象方法,它不能具有默認行爲。如果你真的想要實施一種方法並將責任放在客戶端上,似乎你抽象路線與虛擬路線相比的唯一原因是。 – Xaisoft 2012-07-19 19:32:52

17

抽象意味着你必須覆蓋它。虛擬意味着你可以覆蓋它。或多或少。

+4

此外:使用類中的抽象方法,您的整個類將是抽象的,這意味着您不能創建此類的實例,只能創建派生的非抽象子類。 – dbemerlin 2010-03-16 13:40:18

相關問題