1. 程式人生 > >劉甜 廊坊師範學院資訊科技提高班 十四期

劉甜 廊坊師範學院資訊科技提高班 十四期

多型

多型是面向物件的重要特徵,多型表示不同的物件可以執行相同的動作,但是要通過他們自己的實現程式碼來執行。

使用時注意以下幾點:

  • 子類以父類的身份出現
  • 子類在工作時以自己的方式來實現
  • 子類以父類的身份出現時,子類特有的屬性和方法不可以使用

程式碼實現

下面使用設計模式書中的例子說明多型。

將貓和狗兩個類的例項賦給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();
}

實質

面向物件中多型的實質是說空話,做實事。意思就是,抽象類實際上是說空話的載體,而真正做實際事情的是具體的實現類。