劉甜 廊坊師範學院資訊科技提高班 十四期
阿新 • • 發佈:2018-12-13
多型
多型是面向物件的重要特徵,多型表示不同的物件可以執行相同的動作,但是要通過他們自己的實現程式碼來執行。
使用時注意以下幾點:
- 子類以父類的身份出現
- 子類在工作時以自己的方式來實現
- 子類以父類的身份出現時,子類特有的屬性和方法不可以使用
程式碼實現
下面使用設計模式書中的例子說明多型。
將貓和狗兩個類的例項賦給Animal這個抽象類,當我們呼叫Shout方法時,實際執行的是貓和狗兩個類的方法。
//宣告一個動物陣列 private Animal[] arrayAnimal; //動物報名的按鈕事件 private void button3_Click(object sender,EventArgs e) { //例項化報名的5個動物陣列物件 arrayAnimal=new Animal[5]; arrayAnimal=new Cat("小花"); arrayAnimal=new Cat("嬌嬌"); arrayAnimal=new Dog("小黑"); arrayAnimal=new Dog("阿毛"); arrayAnimal=new Cat("大黃"); } //叫聲比賽的按鈕事件 pravite void button4_Click(object sender,EventArgs e) { //遍歷陣列,讓它們都shout foreach (Animal item in arrayAnimal) { //多型性的實現 MessageBox.Show(item.Shout()); }
多型性實現的基礎是對父類虛方法和子類重寫方法的使用。程式碼如下:
class Animal { ... //虛方法 public virtual string Shout() { return""; } } class Cat:Animal { ... public override string Shout() { string result=""; for (int i=0;i<shoutNum;i++) result+="喵"; return"我的名字叫"+name+""+result; } } class Dog:Animal { ... public override string Shout() { string result=""; for (int i=0;i<shoutNum;i++) result+="汪"; return"我的名字叫"+name+""+result; } }
如果沒有多型的話,參加報名的動物要實現shout方法,就要每個例項都寫一行程式碼,或者根據不同的類再分組實現。
因為貓和狗屬於兩個不同的類,沒有辦法將它們放在一個數組中統一使用方法Shout
private void button3_Click(object sender,EventArgs e) { Cat a =new Cat("小花"); Cat b =new Cat("嬌嬌"); Dog c =new Dog("小黑"); Dog d =new Dogt("阿毛"); Cat e =new Cat("大黃"); } pravite void button4_Click(object sender,EventArgs e) { a.Shout(); b.Shout(); c.Shout(); d.Shout(); e.Shout(); }
實質
面向物件中多型的實質是說空話,做實事。意思就是,抽象類實際上是說空話的載體,而真正做實際事情的是具體的實現類。