**自
同一操作作用於不同的物件,可以有不同的解釋,產生不同的執行結果,這就是多型性。換句話說,實際上就是同乙個型別的例項呼叫「相同」的方法,產生的結果是不同的。這裡的「相同」打上雙引號是因為這裡的相同的方法僅僅是看上去相同的方法,實際上它們呼叫的方法是不同的。
多型是基於物件繼承和黎克特制轉換的,那麼什麼叫叫作黎克特制轉換呢
//首先,我們定義兩個有繼承關係的類
public
class person
}public
class student : person
}//在main方法中例項化一下
static
void main(string argus)
//as方法是如果p物件能夠轉換成student物件,則返回student例項物件
上面的例子就把乙個子類賦值給了乙個父類,並且父類轉化成了子類,並呼叫方法
由於有了黎克特制轉換,所以所有父類出現的地方,子類都可以出現,比如引數,有的引數型別是object,而object是所有類的父類,所以可以賦值給任意值
虛方法中乙個重要的實現就是對父類方法的重寫,解釋一下重寫的概念
重寫(override):子類中為滿足自己的需要在子類中來重複定義某個方法的不同實現,需要用override關鍵字,被重寫的父類方法必須是虛方法,用的是virtual關鍵字。它的特點是(三個相同):
舉乙個例子
//首先我先定義三個有繼承關係的類,student和master類繼承於person
public
class person
}public
class student : person
}public
class master : person
}//繼承的兩個類都對父類的虛方法進行了override重寫
//我們在main方法中例項並且呼叫一下
static
void main(string args)
/*輸出結果:
我是人類
我是學生
我是班長
*/
子類賦值給了父類,當父類中裝的是子類的例項的時候,父類在呼叫方法的時候,會自動去找到對應的子類例項物件的方法,這也就實現了乙個方法實現了多種功能,也就是多種狀態,也就是多型了!
當然這裡也可以選擇不對父類的虛方法進行重寫,如果這樣的話要呼叫子類的方法就必須是通過子類來呼叫了,父類也要強制轉換為子類才可以呼叫
實現多型的第二種方式——【抽線類實現多型】
C 多型,虛方法,抽象方法
多型 是物件導向程式設計中三大機制之一,其原理建立在 從父類繼承而來的子類可以轉換為其父類 這個規則之上,換句話說,能用父類的地方,就能用該類的子類.當從父類派生了很多子類時,由於每個子類都有其不同的 實現,所以當用父類來引用這些子類時,同樣的操作而可以表現出不同的操作結果,這就是所謂的多型.1.了...
C 虛函式與多型
1.1 虛函式概念 1.定義 在乙個類的成員函式前面加上virtual關鍵字,則該函式就稱為虛函式。2.如果乙個函式不是類的成員函式,則該函式不能定義為虛函式。即就是類外面不能使用virtual關鍵字 1.2 純虛函式與抽象類 1.純虛函式 在虛函式的後面加上 0 virtual void disp...
c 多型與虛函式
多型按字面的意思就是多種形態。當類之間存在層次結構,並且類之間是通過繼承關聯時,就會用到多型。c 多型意味著呼叫成員函式時,會根據呼叫函式的物件的型別來執行不同的函式。下面的例項中,基類 shape 被派生為兩個類,如下所示 include using namespace std class sha...