C#入门9.13——类的多态

在类的继承中,C#允许在基类与派生类中生命具有同名的方法,而且同名的方法可以有不同的代码,也就是说在基类与派生类的相同功能中可以有不同的实现方法,从而为解决同一问题提供多个途径。

多态性就是指在程序运行时,执行的虽然是一个调用方法的语句,却可以根据派生类对象的类型不同完成方法不同的具体实现。

在C#中可以通过多种途径实现多态性。

虚方法:

1.将父类的方法标记为虚方法,使用关键字virtual,此方法在子类中可以重写(使用关键字override)

2.抽象类与抽象方法:如果我们不需要使用父类创建对象,它的存在只是为供子类继承。可以将父类写成抽象(关键字abstract)类,将父类方法写成抽象方法,子类中的方法仍用关键字override重写。

3.接口实现:


我们选择使用虚方法实现多态还是抽象类抽象方法实现多态,取决于我们是否需要使用基类实例化的对象。

抽象类:不需要使用基类实例化的对象。

虚方法:需要使用基类实例化的对象

比如说 现在有一个Clerk类作为基类,ProjectManager类继承自Clerk,这个时候我们就需要使用虚方法来实现多态了,因为我们要使用Clerk创建的对象,这些对象就是普通员工对象。

再比如说,现在有一个Drink类作为基类,Milk,Tea类继承Milk,我们需要使用的是Milk和Tea创建的对象,根本不需要使用Drink创建的对象,所以在这里Drink完全可以写成抽象类。


实例1:职员需要有工作计划,经理也需要有工作计划

虚方法:如果不使用virtual和override,那么子类调用同名函数时,调用的是父类的函数,所以需要虚方法。

class Clerk
{
	public virtual void WorkPlan()
	{
		Console.WriteLine("我是职员,我需要有工作计划");
	}
}


Class ProjectManager:Clerk
{
	public override void WorkPlan()
	{
		Console.WriteLine("我是项目经理,我需要有工作计划");
	}
}


state void Main(string[] args)
{
	Clerk myClerk=new Clerk();
	ProjectManager myPM=new ProjectManager();

	Clerk clerk={myClerk,myPM};
	foreach(Clerk outclerk in clerk)
		outclerk.WorkPlan();
	Console.ReadKey();
}

实例2:茶可以解渴,牛奶也可以解渴

abstract class Drink
{
	public abstract void drink();
}

class Milk:Drink
{
	public override void drink()
	{
		cw("我是牛奶,可以解渴");
	}
}

class Tea:Drink
{
	public override void drink()
	{
		cw("我是茶,可以解渴");
	}
}


state void Main(string[] args)
{
	Drink myMilk = new Milk();
	Drink myTea= new Tea();
	Drink[] drink ={myMilk,myTea};
	
	foreach(Drink out drink in drink) outdrink.drink;
	//抽象类是不允许创建实例的


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值