面向对象-多态

多态

多态是面向对象的重要特征,多态表示不同的对象可以执行相同的动作,但是要通过他们自己的实现代码来执行。

使用时注意以下几点:

  • 子类以父类的身份出现
  • 子类在工作时以自己的方式来实现
  • 子类以父类的身份出现时,子类特有的属性和方法不可以使用

代码实现

下面使用设计模式书中的例子说明多态。

将猫和狗两个类的实例赋给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();
}

实质

面向对象中多态的实质是说空话,做实事。意思就是,抽象类实际上是说空话的载体,而真正做实际事情的是具体的实现类。

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值