c#的多型性:
我的理解是:同乙個操作,作用於不同的物件時,會有不同的結果,即同乙個方法根據需要,作用於不同的物件時,會有不同的實現。
c#的多型包括:介面多型,繼承多型。
其中繼承多型又包括通過虛擬方法實現的多型和通過抽象方法實現的多型性
例如:基類動物都有吃的方法,但是不同的動物吃的東西就會不一樣,例如狼吃肉,羊吃草,這樣「吃」的這個方法就要在派生類裡面重新實現以下,執行時,通過指向基類的指標,來呼叫實現派生類中的方法。
接下來舉例實現多型性。
1. 介面多型性
把動物「吃」的方法放到乙個介面(ianimal)裡,然後讓具體的動物類(wolf/sheep)繼承這個介面,並根據自己的需要實現這個介面。
**實現:
class program}public
class wolf : ianimal
}public
class sheep : ianimal }//
介面public
inte***ce ianimal
介面的多型性就是當不同的類繼承了相同的介面以後,都要根據自己的需要重新實現繼承的介面,這樣同樣的方法簽名在不同的類中就會實現不同的操作。
2. 繼承的多型性
2.1.通過虛擬方法實現的多型(virtual,override)
首先要在基類中實現virtual方法,然後在派生類中根據自己的需要用override重寫virtual方法。如果不希望這個方法被繼續重寫,則把這個方法寫成sealed方法。
virtual方法必須在基類中實現。
**實現:
class program}public
class wolf : animal
}public
class sheep : animal
}public
class goat : sheep }//
基類實現虛方法
public
class animal
}
2.2.通過抽象方法實現的多型(abstract,override)
抽象方法必須定義在抽象類裡。抽象類不能被建立例項。
基類中的抽象方法只能被宣告,不需要實現,所以
派生類中重寫抽象方法的時候沒有base方法。
**實現如下:
class program}public
class wolf : animal
}public
class sheep : animal
}public
class goat : sheep }//
基類只需宣告方法
public
abstract
class animal
總結:1.虛方法重寫的時候可以有base方法(base.eat()),抽象方法重寫的時候沒有base方法,原因是:虛方法必須在基類中實現,抽象方法只在基類中宣告,不需要實現。
2.派生類中可以 不重寫虛方法的實現,但是派生類必須重寫抽象方法的實現,原因同1.
3.包含虛方法的非抽象類可以被建立例項(物件),但是包含抽象方法的抽象類不能被建立例項。
4.繼承介面的派生類必須實現介面的方法,因為介面也是只負責宣告方法,不負責實現。
5.介面的多型性不需要用override重寫方法。
物件導向程式設計的三大特性(多型)
具體操作 語法 父類名 物件名 new 子類名 專案含義 含義同乙個介面,使用不同的例項,進而執行不同的操作 優點靈活 簡化 介面性,可替換 擴充性,消除型別間的耦合關係 必要條件 繼承 重寫 父類引用指向子類物件。animal cat new cat cat.eat 當使用多型方式呼叫方法時 檢查...
C 物件導向的三大特性 多型
多型 class fruit protected string f protected int a class orange public fruit protected int o void testprint fruit f 注意 在程式執行時,根據p所引用物件的不同,最終呼叫的虛函式就不一樣 ...
物件導向三大特徵 多型
訊息是乙個物件與另乙個物件的通訊單元,是要求某個物件執行類中定義的某個操作的規格說明。傳送給乙個物件的訊息定義了乙個方法名和乙個參數列 可能是空的 並指定某乙個物件。物件接收的訊息則呼叫訊息中指定的方法,並將形式引數與參數列中相應的值結合起來。如有兩個類分別是教練和運動員,如下 教練類 public...