在面對對象編程中,類的三大特性分別為封裝,繼承,多態。其中多態的具體實現,依賴於三個方法,也就是虛方法,抽象類和介面。 多態的具體作用是什麼呢?或者說多態的存在有什麼意義呢?多態的存在有效的降低了程式的耦合度,在使用的時候,不僅可以表現大家都有的共性,還能在必要的時候突出一些特殊的的個性。 那麼如何 ...
在面對對象編程中,類的三大特性分別為封裝,繼承,多態。其中多態的具體實現,依賴於三個方法,也就是虛方法,抽象類和介面。
多態的具體作用是什麼呢?或者說多態的存在有什麼意義呢?多態的存在有效的降低了程式的耦合度,在使用的時候,不僅可以表現大家都有的共性,還能在必要的時候突出一些特殊的的個性。
那麼如何用上文三個方法實現多態呢?
今天先說下虛方法:
首先,我們定義一個人類的基類。其中包含了這個人的姓名和國籍。
class Person { public string Name; public string Country; public void Introduce() {
Console.WriteLine("我的名字是"+Name);
Console.WriteLine("我來自"+Country); } }
然後我們添加一個類。
class People1:Person
{
}
此時我們進行創建對象賦值引用
People1 ch = new People1(); ch.Name = "小明"; ch.Country = "中國"; ch.Introudce(); 運行結果: 我的名字是小明 我來自中國
如果所有人都是中國人,那麼這個方法足以勝任,可偏偏就有這麼一個人,來自外國,不會中文,那麼這個介紹的方法就有點拗口了。這就是特例,存在即合理,總不能因為他特殊就把他抹殺了吧。這時多態站出來喊了一句:”我發量多,讓我來!“。
虛方法:在類方法聲明前加上了virtual 修飾符,就稱之為虛方法,反之為非虛。並且在使用了virtual 修飾符後,不允許再有static, abstract, 或override 修飾符。有了這個虛方法,我們就可以十分容易的解決這個特例。
首先我們需要修改一下基類中的介紹方法,讓它虛化,成為一個虛方法(說白了就是加個修飾符 virtual)
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
不需要進行大規模的修改,根據需要進行修改,在不需要修改的時候可以進行原有的方法使用,這就是虛方法的優點。
以上是我個人的一些拙略見解,如果有誤,有幸被前輩看到,也希望前輩能不吝賜教,感謝感謝!!!