在面對對象編程中,類的三大特性分別爲封裝,繼承,多態。其中多態的具體實現,依賴於三個方法,也就是虛方法,抽象類和接口。編程
多態的具體做用是什麼呢?或者說多態的存在有什麼意義呢?多態的存在有效的下降了程序的耦合度,在使用的時候,不只能夠表現你們都有的共性,還能在必要的時候突出一些特殊的的個性。ide
那麼如何用上文三個方法實現多態呢?spa
今天先說下虛方法:code
首先,咱們定義一我的類的基類。其中包含了這我的的姓名和國籍。對象
class Person { public string Name; public string Country; public void Introduce() {
Console.WriteLine("個人名字是"+Name);
Console.WriteLine("我來自"+Country); } }
而後咱們添加一個類。blog
class People1:Person { }
此時咱們進行建立對象賦值引用繼承
People1 ch = new People1(); ch.Name = "小明"; ch.Country = "中國"; ch.Introudce(); 運行結果: 個人名字是小明 我來自中國
若是全部人都是中國人,那麼這個方法足以勝任,可恰恰就有這麼一我的,來自外國,不會中文,那麼這個介紹的方法就有點拗口了。這就是特例,存在即合理,總不能由於他特殊就把他抹殺了吧。這時多態站出來喊了一句:」我髮量多,讓我來!「。接口
虛方法:在類方法聲明前加上了virtual 修飾符,就稱之爲虛方法,反之爲非虛。而且在使用了virtual 修飾符後,不容許再有static, abstract, 或override 修飾符。有了這個虛方法,咱們就能夠十分容易的解決這個特例。string
首先咱們須要修改一下基類中的介紹方法,讓它虛化,成爲一個虛方法(說白了就是加個修飾符 virtual)it
class Person { public string Name; public string Country; public virtual void Introudce()//添加修飾符virtual讓介紹這個方法變成虛方法 { Console.WriteLine("個人名字爲"+Name); Console.WriteLine("我來自"+Country); } }
而後咱們將這個不合羣的特例添加進來,而且專門爲他的不同凡響,對方法進行更改,咱們稱之爲重寫(override)。
class People2 { public override void introduce() { Console.WriteLine("My name is "+Name); Console.WriteLine("I'm from "+Country); } }
接下來咱們只須要將大象裝進冰箱便可。建立對象,賦值引用
People2 Eup = new People2(); Eup.Name = "Jack"; Eup.Country = "American"; Eup.Introudce(); 運行結果: My name is Jack I'm from American
不須要進行大規模的修改,根據須要進行修改,在不須要修改的時候能夠進行原有的方法使用,這就是虛方法的優勢。
以上是我我的的一些拙略看法,若是有誤,有幸被前輩看到,也但願前輩能不吝賜教,感謝感謝!!!