为什么要使用抽象类 接口编程以及有什么好处

首先举个例子
假设某动物园管理员每天需要给他所负责饲养的狮子、猴子和鸽子喂食。我们用一个程序来模拟他喂食的过程。
先用常规类编程方式
饲养员用一个 Feeder() 类来表示,三个动物分别是:class Monkey() ,class Pigeon()  ,class Lion()
//饲养员类
class Feeder
{
 	void FeedMonkey(Monkey m)
	{
   		m.eat()
	}
        ...
        ...
        ...
}

饲养员喂食的过程如下:
static void Main(string[] args)
{
Monkey m = new Monkey();
Pigeon p = new Pigeon();
Lion l = new Lion();

Feeder f = new Feeder();

f.FeedMonkey(m); //喂猴子
f.FeedPigeon(p); //喂鸽子
f.FeedLion(l); //喂狮子
}
如果动物园领导看伺养员工作努力,又把大熊猫交给他管理。这时,我们的程序不得不给
Feeder 类增加第四个方法: FeedPanda()。
万一饲养员后来又不管理鸽子了,那不又得从 Feeder 类中删除 FeedPigeon()方法吗?
这种编程方式很明显是不合理的。
很明显,狮子、猴子和鸽子都是一种动物,因此,可以建立一个 Animal 抽象基类,让狮子、猴子和鸽子从其派生出来
由于不同的动物吃不同的食物,所以在 Animal 类中定义一个抽象的 eat()方法,由子类负责实现此方法。
abstract class Animal
{
	public abstract void eat();
}
//狮子
class Lion:Animal
{
	public override void eat()
	{
		//吃肉
	}
}
//猴子
class Monkey:Animal
{
	public override void eat()
	{
		//吃香蕉
	}
}
//鸽子
class Pigeon:Animal
{
	public override void eat()
	{
		//吃大米
	}
}
伺养员类如下:
//动物园饲养员
class Feeder
{
        //抽象类做为参数(同样也可以是接口参数)
	public void FeedAnimal(Animal animals)
	{
		animals.eat();
	}
}
现在喂养过程变为:
static void Main(string[] args)
{
Monkey m = new Monkey();
Pigeon p = new Pigeon();
Lion l = new Lion();
Feeder f = new Feeder();
f.FeedAnimal(m);//喂猴子
f.FeedAnimal(p);//喂鸽子
f.FeedAnimal(l);//喂狮子
}
简化后的代码变得非常简洁。对比最早的使用三个独立方法实现的方法,新代码扩展性大大增强。不管有几种动物,只需要创建动物类,饲养员 Feeder 类的 FeedAnimals 方法不用改就可以使用。
还一个好处就是在项目的开始期,设计好抽象类Animal,不必等到各子类完成eat()等方法,大家就可以协同工作了。
以上大家可以明白为什么使用抽象类编程或者使用抽象类编程的好处了吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值