接口,虛方法,抽象方法

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

抽象方法

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

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

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

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

虛方法

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

調用虛方法,運行時將確定調用對象是什麼類的實例,並調用適當的覆寫的方法。

虛方法可以有實現體 若一個實例方法的聲明中含有 virtual 修飾符,則稱該方法爲虛擬方法;

一個虛擬方法的實現可以由派生類取代。取代所繼承的虛擬方法的實現的過程稱爲重寫該方法;在一個虛擬方法調用中,該調用所涉及的那個實例的運行時類型確定了要被調用的究竟是該方法的哪一個實現。

虛函數的限制:

1.虛函數僅適用於有繼承關係的類對象, 所以只有類的成員函數才能說明爲虛函數.

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

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

4構造函數不能是虛函數.

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

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

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

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

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

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

都必須建立在繼承關係下才可以使用

區分點: 虛方法: 虛方法是在明確父類下的子類有共通的方法,且還有各自的特性方法下使用

抽象方法:抽象方法是明確父類下的子類沒有共通的方法,且不明確如何寫,子類有各自的特性方法下使用

接口: 接口是抽象方法下的特性方法,可以添加在抽象子類下作爲抽象方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章