虛方法實現多型

2021-07-12 02:46:58 字數 1329 閱讀 2188

大家都知道物件導向的三大特徵,封裝、繼承、多型,這裡解釋一下多型

同一操作作用於不同的物件,可以有不同的解釋,產生不同的執行結果,這就是多型性。換句話說,實際上就是同乙個型別的例項呼叫「相同」的方法,產生的結果是不同的。這裡的「相同」打上雙引號是因為這裡的相同的方法僅僅是看上去相同的方法,實際上它們呼叫的方法是不同的。

多型是基於物件繼承和黎克特制轉換的,那麼什麼叫叫作黎克特制轉換呢

//首先,我們定義兩個有繼承關係的類

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)

/*輸出結果:

我是人類

我是學生

我是班長

*/

子類賦值給了父類,當父類中裝的是子類的例項的時候,父類在呼叫方法的時候,會自動去找到對應的子類例項物件的方法,這也就實現了乙個方法實現了多種功能,也就是多種狀態,也就是多型了!

當然這裡也可以選擇不對父類的虛方法進行重寫,如果這樣的話要呼叫子類的方法就必須是通過子類來呼叫了,父類也要強制轉換為子類才可以呼叫

實現多型的第二種方式——【抽線類實現多型】

多型實現之 虛方法

多型實現共有三種途徑,分別是 虛方法 抽象類 介面,本篇講述第一種方法 虛方法。1.什麼是虛方法?虛方法,從語法上來說是被virtual關鍵字修飾的方法,從含義上講,這個方法在類被繼承後可以在子類重寫 override 2.在子類中重寫虛方法需要注意哪些問題?首先說明的是,子類中的重寫並不是必須的,...

通過虛方法實現方法重寫 多型

方法表 方法槽 在乙個類裡邊可能有一些成員和一些方法,乙個類裡有專門的位址,記錄方法表的位址,根據方法表找到方法當子類繼承了父類以後,會拿到父類的方法表,有乙個方法槽。當子類重寫父類的方法以後,子類重寫了乙份父類的方法。如果重寫了,會從槽裡找重寫後的方法,this點方法,指向重寫後的方法,base點...

C 多型實現之虛方法

控制台應用程式中,新建乙個people類檔案,如下 using system using system.collections.generic using system.linq using system.text namespace 13多型 public string name 1.第一,將父類...