为了更好地理解多态,下面我们来看一个接近真实的示例......
假设某动物园管理员每天需要给他所负责饲养的狮子、猴子和鸽子喂食。我们用一个程序来模拟他喂食的过程。
面向对象建模中的“名词法”
名词法:用人类的自然语言描述出软件要干的事,挑出其中的名词,它们就是“候选”的“类”。
- 动物园管理员每天需要给他所负责饲养的狮子、猴子和鸽子喂食。
- 抽取名词:动物园、管理员、狮子、鸽子、猴子
- 三种动物对应三个类,每个类定义一个eat()方法,表示吃饲养员给它们的食物。
- 再设计一个Feeder类代表饲养员,其name字段保存饲养员名字,三个方法分别代表喂养三种不同的动物,其参数分别引用三种动物对象。
class Program
{
abstract class Animal
{
public abstract void eat();
}
class Feeder
{
public String name;
public void Feed(Animal an)
{
an.eat();
}
}
class Monkey:Animal
{
public override void eat()
{
Console.WriteLine("吃香蕉");
}
}
class Pigeon:Animal
{
public override void eat()
{
Console.WriteLine("吃大米");
}
}
class Lion : Animal
{
public override void eat()
{
Console.WriteLine("吃肉");
}
}
static void Main(string[] args)
{
Animal m = new Monkey();
Animal l = new Lion();
Animal p = new Pigeon();
Feeder f = new Feeder{ name = "xiaoming" };
f.Feed(m);
f.Feed(l);
f.Feed(p);
Console.ReadKey();
}
}
“多态”的好处
- 使代码具有更强的适用性。当需求变化时,多态特性可以帮助我们将需要改动的地方减少到最小限度。
实现方式:
继承多态
接口多态