zoukankan      html  css  js  c++  java
  • C#编程语言与面向对象—— 多态

    多态编程的基本原理是:
    使用基类或接口变量编程。

    在多态编程中,基类一般都是抽象类,其中拥有一个或多个抽象方法,各个子类可以根据需要重写这些方法。或者使用接口,每个接口都规定了一个或多个抽象方法,实现接口的类根据需要实现这些方法。

    因此,多态的实现分为两大基本类别:继承多态和接口多态。

    继承多态

    设想动物园饲养员每天需要给他所负责死样的狮子、猴子和鸽子喂食。

    首先,建立三个类分别代表三个动物

    饲养员用Feeder类表示。由于三种动物吃的动物一样,Feeder类必须拥有三个喂动物的公共方法:

    过程如下:

    static void Main(string[] args)
    {
        Monkey m=new Monkey();
        Pigeon p=new Pigeon();
        Lion l=new Lion();
    
        Feeder f=new Feeder();
    
        f.Name="小李";
    
    
        f.FeedMonkey();    //喂猴子
        f.FeedPigeon();    //喂鸽子
        f.FeedLion();        //喂狮子
    }

    如果领导有又把熊猫交给他管理,这是我们的程序不得不给Feeder类在增加一个方法:FeedPanda();

    万一小李后来又不管猴子了,又要从Feeder类中删除FeedPigeon()方法。

    所以这种编程方式很明显不合理的。

    我们可以应用多态的方法解决。

    首先因为它们都是动物,因此,可以建立一个Animal抽象基类。

    由于不同的动物吃不同的食物,所以在Animal类中定义一个抽象方法:eat();有子类负责实现。

    abstract class Animal
    {
        public abstract void eat();
    }
    
    //狮子
    class Lion:Animal
    {
        public override void eat()
        {
            Console.WriteLine("吃肉");
        }
    }
    
    //猴子
    class Money:Animal
    {
        public override void eat()
        {
            Console.WriteLine("吃香蕉");
        }
    }
    
    //鸽子
    class Pigeon:Animal
    {
        public override void eat()
        {
            Console.WriteLine("吃大米");
        }
    }

    现在,可以将Feeder类的三个喂养方法合并为一个FeedAnimal:

    Feeder类代码:

    //饲养员
    class Feeder
    {
        public String Name;
        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.Name="小李";
    
        f.FeedAnimal(m);//喂猴子
        f.FeedAnimal(p);//喂鸽子
        f.FeedAnimal(l);//喂狮子
    }

    我们修改一下Feeder类的定义,增加一个新方法FeedAnimals(),新方法远程的功能是喂养一群动物,接受的是Animal的数组:

    class Feeder
    {
        //喂养一群动物
        public voidFeedAnimals(Animal[] ans)
        {
            foreach(Animal an in ans)
            {
                an.eat();
            }
        }
    }

    过程如下:

    static void Main(string args)
    {
        //动物数组
        Animal[] ans={new Monkey(),new Pigeon(), new Lion()};
        Feeder f=new Feeder();
        f.Name="小李";
        f.FeedAnimals(ans);
    }

    代码中数组ans的元素为Animal,因此,可以在其中存入任何一个Animal的子类。具有这种特性的数组成为"多态数组"。

    编程中应用多态,可以将其简化为一下两句:

    应用继承实现对象的统一管理。

    应用接口定义对象的行为特征。

    使用多态的好处:

    当要修改程序并扩充系统时,需要修改的地方较少,对其他部分代码的影响较小。

  • 相关阅读:
    【转】android新建项目时 出现appcompat_v7工程错误和红色感叹号
    【转】eclipse新建项目,报错“Error: workspaceappcompat_v7 esvalues-v21styles_base.xml No resource found that matches the given name”
    【转】android开发工具Eclipse,androidStudio,adt网盘下载--不错
    【转】Windows搭建Eclipse+JDK+SDK的Android
    【转】Ubuntu 14.04配置安装java环境和android开发环境(包括真机调试环境)
    【转】[MTK软件原创] [SELinux] 如何设置确认selinux模式
    【转】Android中removeCallbacks失效原因
    【转】Android
    【转】Android开发20——单个监听器监听多个按钮点击事件
    【编程】辨异 —— proxy 与 delegate
  • 原文地址:https://www.cnblogs.com/guyg/p/3885596.html
Copyright © 2011-2022 走看看