抽象方法與虛方法的異同(以及抽象類和介面)

2021-10-04 01:27:38 字數 1327 閱讀 5278

抽象方法與虛方法的異同(以及抽象類和介面)

1.抽象方法是只有定義、沒有實際方法體的函式,它只能在抽象函式**現,並且在子類中必須重寫;

2.虛方法則有自己的函式體,已經提供了函式實現,但是允許在子類中重寫或覆蓋。 重寫的子類虛函式就是被覆蓋了。

3.抽象方法:

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

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

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

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

4.虛方法:

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

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

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

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

5.虛函式的限制:

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

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

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

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

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

6.什麼是抽象類

在類宣告中使用abstract修飾符的類稱為抽象類。抽象類具有以下特點:

√抽象類不能例項化。

√抽象類可以包含抽象方法和抽象訪問器。

√抽象類中可以存在非抽象的方法。

√不能用sealed修飾符修改抽象類,這也意味著抽象類不能被繼承。

√從抽象類派生的非抽象類必須包括繼承的所有抽象方法和抽象訪問器的實現。

√抽象類可以被抽象類所繼承,結果仍是抽象類。

7.什麼是介面

介面是類之間互動內容的乙個抽象,把類之間需要互動的內容抽象出來定義成介面,可以更好的控制類之間的邏輯互動。介面具有下列特性:

√介面類似於抽象基類。繼承介面的任何非抽象型別都必須實現介面的所有成員。

√不能直接例項化介面。

√介面可以包含事件、索引器、方法和屬性。

√介面不包含方法的實現。

√類和結構可從多個介面繼承。√介面自身可從多個介面繼承。

介面中方法預設都是public,不需要加了。

但介面的實現類一定要定義方法為public

抽象方法與虛方法

在物件導向程式設計語言中抽象方法指一些只有方法宣告,沒有具體方法體的方法。抽象方法一般存在於抽象類或介面中。在c 中,抽象方法具有以下特性 抽象方法是隱式的virtual方法 只允許在抽象類中使用抽象方法宣告 因為抽象方法不提供實現,所以沒有方法體 方法宣告只是以乙個分號結束,並且在簽名後沒有大括號...

虛方法與抽象方法

虛方法 virtual,虛方法給父類提供了一種預設的實現,子類可以使用override重寫虛方法,虛方法不能出現在密封類 sealed 中。抽象類,不能被例項化,但可以例項化其子類的物件,抽象方法必須出現在抽象類中,抽象方法必須在子類中重寫。子類繼承抽象類,必須重寫抽象類中所有的抽象方法 除非子類也...

虛方法與抽象方法

虛方法 1 virtual方法表示此方法可以被重寫,也就是說這個方法具有多型.父類中的方法是通用方法,可以在子類中重寫以重新規定方法邏輯.2 virtual方法可以直接使用,和普通方法一樣 3 不是必須重寫的.子類可以使用base.方法 的方式呼叫,無論有沒有在子類使用override去重寫 vir...