c#多态性的应用

设计一个电脑游戏,游戏中有猪、牛、兔子、青蛙、鸭子等动物,这些动 物都继承于Vertebrata 类(脊椎动物类),Vertebrata类有一个抽象方法Display(),每个动 物都从Vertebrata 类那里继承并重写了Display()方法,用来把动物本身画在屏幕上。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DuTai
{
    internal class Program
    {
        static void Main(string[] args)
        {
              // 声明一个基类(Vertebrata 类)的引用符数组
       Vertebrata[] animals = new Vertebrata[5];
    // 让每个引用符指向一个派生类对象
            animals[0] = new Pig();
            animals[1] = new Rabbit();
            animals[2] = new Cattle();
            animals[3] = new Frog();
            animals[4] = new Duck();
    //通用处理
    foreach (Vertebrata someone in animals)
            {
                someone.Display();   //不论对象是什么类型,都使用相同的语句处理           
            }
    Console.ReadKey();
        }
       
    }


    //脊椎动物总类 
    abstract class Vertebrata
    {
        
        public abstract void Display();//抽象方法:绘图
        //其他成员
        //......; 
        //......; 
    }
    //哺乳动物(副总)类 
    class Mammal : Vertebrata
    {

        public override void Display()        //重写方法:绘图
        {
        }
    }

    //鸟类(副总类) ,继承于脊柱动物(总)类
    class Bird : Vertebrata
    {
        //重写方法:绘图 
        public override void Display()
        {
        }
    }

    //两栖动物(副总类),继承于脊柱动物(总)类
    class Amphibian : Vertebrata
    {
        //重写方法:绘图 
        public override void Display()
        {
        }
    }

    //猪类 ,继承于哺乳动物(副总)类 
    class Pig : Mammal
    {
       
        public override void Display()// //重写方法:绘图 
        {
            Console.WriteLine(@"  ╭︿︿☆╮ oοΟ 
                                  {/ . .\}  
                                   ( (oo) )    
                                    ︶︶︶  
                                 我是笨猪我怕谁  ");
        }

    }
    //兔子类 ,继承于哺乳动物(副总)类
    class Rabbit : Mammal
    {
        //重写方法:绘图 
        public override void Display()
        {
            Console.WriteLine(@"  (\(\  /)/)  
                                  (-.-)(-.-) 
                                 小兔子乖乖");
        }
    }

    //牛类 ,继承于哺乳动物(副总)类
    class Cattle : Mammal
    { //重写方法:绘图 
        public override void Display()
        {
            Console.WriteLine(@"   (___) 
                                   (o o)____( 
                                    @@ `     \          
                                     \ ____, / 
                                     //    //  
                                    ^^    ^^    
                                   勤劳的牛");
        }
    }
    //青蛙类 ,继承于两栖动物(副总类)
    class Frog : Amphibian
    {
        //重写方法:绘图 
        public override void Display()
        {
            Console.WriteLine(@"   @..@ 
                                  (\--/) 
                                  (.>__<.) 
                                  ^^^ ^^^ 
                                   青蛙王子");
        }
    }
    //鸭子类 ,继承于鸟类(副总类)
    class Duck : Bird
    {
        //重写方法:绘图 
        public override void Display()
        {
            Console.WriteLine(@"        __ 
                                      >(' ) 
                                        )/ 
                                       /( 
                                      / `----/ 
                                      \ ~=- / 
                                  ~^~^~^~^~^~^~^ 
                                 春江水暖鸭先知");
        }
    }

}

启动程序:

程序中的foreach语句是 通用部分,Vertebrata 型引用符someone依次指向数组animals中的 对象,不管对象是哪种动物,都使用语句“someone.Display()”进 行绘图。系统根据 someone 指向的动物类型调用对应版本的 Display()方法。当添加一种新的动物时,只需要往数组里添加一个 对象,程序的通用部分不需要修改。 

继承和多态性是开发复杂软件的关键技术,特别适合于分层软 件系统。操作系统要处理各种各样的存储介质,比如硬盘、软盘、 U盘等等,这些硬件的具体工作原理显然是不同的,但它们都有读 和写两个操作。操作系统可以设计一个抽象基类,提供 Read()和 Write()两个抽象函数,各种硬件的驱动程序被编写为该抽象基类的 派生类,具体实现Read()和Write()操作。操作系统只需通过基类的 引用符调用Read()和Write()函数即可,不用关心在读取哪种存储介 质,更不用关心它们是怎么实现的。当有新设备产生以后,设备生 产厂家只需编写继承于抽象基类的驱动程序即可,不用更改操作系 统本身。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值