虛方法與抽象方法有什麼區別

2021-08-06 02:50:43 字數 1050 閱讀 7777

抽象方法是只有定義、沒有實際方法體的函式,它只能在抽象函式中出現,並且在子類中必須重寫;虛方法則有自己的函式體,已經提供了函式實現,但是允許在子類中重寫或覆蓋。

重寫的子類虛函式就是被覆蓋了。

抽象方法

使用abstract關鍵字 public abstract bool withdraw(…);

抽象方法是必須被派生類覆寫的方法。

抽象方法是可以看成是沒有實現體的虛方法

如果類中包含抽象方法,那麼類就必須定義為抽象類,不論是否還包含其它一般方法

虛方法

使用virtual關鍵字 public virtual bool withdraw(…);

呼叫虛方法,執行時將確定呼叫物件是什麼類的例項,並呼叫適當的覆寫的方法。

虛方法可以有實現體 若乙個例項方法的宣告中含有 virtual 修飾符,則稱該方法為虛擬方法;

乙個虛擬方法的實現可以由派生類取代。取代所繼承的虛擬方法的實現的過程稱為重寫該方法;在乙個虛擬方法呼叫中,該呼叫所涉及的那個例項的執行時型別確定了要被呼叫的究竟是該方法的哪乙個實現。

虛函式的限制:

1.虛函式僅適用於有繼承關係的類物件, 所以只有類的成員函式才能說明為虛函式.

2.靜態成員函式不能是虛函式.

3.內聯函式不能是虛函式.

4建構函式不能是虛函式.

5.析構函式可以是虛函式. 簡單點說,抽象方法是需要子類去實現的.虛方法,是已經實現了,子類可以去覆蓋,也可以不覆蓋取決於需求.

簡單點說,抽象方法是需要子類去實現的.虛方法,是已經實現了,子類可以去覆蓋,也可以不覆蓋取決於需求. 

虛方法和抽象方法都可以供派生類重寫,它們之間有什麼區別呢?

1. 虛方法必須有實現部分,抽象方法沒有提供實現部分,抽象方法是一種強制派生類覆蓋的方法,否則派生類將不能被例項化。

2. 抽象方法只能在抽象類中宣告,虛方法不是。其實如果類包含抽象方法,那麼該類也是抽象的,也必須宣告為抽象的。

3. 抽象方法必須在派生類中重寫,這一點跟介面類似,虛方法不必。

虛方法與抽象方法有什麼區別

正確寫法 public class cat animal public override void eat 抽象方法是必須被派生類覆寫的方法。抽象方法是可以看成是沒有實現體的虛方法。如果類中包含抽象方法,那麼類就必須定義為抽象類,不論是否還包含其它一般方法。public class a public...

虛方法與抽象方法有什麼區別

抽象方法是只有定義 沒有實際方法體的函式,它只能在抽象函式中出現,並且在子類中必須重寫 虛方法則有自己的函式體,已經提供了函式實現,但是允許在子類中重寫或覆蓋。重寫的子類虛函式就是被覆蓋了。抽象方法 使用abstract關鍵字 public abstract bool withdraw 抽象方法是必...

虛方法與抽象方法的區別

隨著學習的深入了解的也是越來越多,之前學習vb的時候 可能級別太低,什麼虛方法,抽象方法根本就沒聽過。只知道有乙個 方法 那今天就讓我們說說虛方法,抽象方法的到底是何方神聖以及它們之間的區別。1 虛方法有自己的函式體,已經提供了函式實現,但是允許在子類中重寫或覆蓋。重寫的子類虛函式就是被覆蓋了。2 ...