北京理工大学金旭亮老师C#(74—Zoo)

为了更好地理解多态,下面我们来看一个接近真实的示例......

假设某动物园管理员每天需要给他所负责饲养的狮子、猴子和鸽子喂食。我们用一个程序来模拟他喂食的过程。

面向对象建模中的“名词法”

名词法:用人类的自然语言描述出软件要干的事,挑出其中的名词,它们就是“候选”的“类”。

  • 动物园管理员每天需要给他所负责饲养的狮子、猴子和鸽子喂食。
  • 抽取名词:动物园、管理员、狮子、鸽子、猴子
  • 三种动物对应三个类,每个类定义一个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();
        }
    }

“多态”的好处

  • 使代码具有更强的适用性。当需求变化时,多态特性可以帮助我们将需要改动的地方减少到最小限度。

实现方式:

继承多态

接口多态

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值