在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
多态编程的基本原理是: 在多态编程中,基类一般都是抽象类,其中拥有一个或多个抽象方法,各个子类可以根据需要重写这些方法。或者使用接口,每个接口都规定了一个或多个抽象方法,实现接口的类根据需要实现这些方法。 因此,多态的实现分为两大基本类别:继承多态和接口多态。 继承多态 设想动物园饲养员每天需要给他所负责死样的狮子、猴子和鸽子喂食。 首先,建立三个类分别代表三个动物 饲养员用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的子类。具有这种特性的数组成为"多态数组"。 编程中应用多态,可以将其简化为一下两句: 应用继承实现对象的统一管理。 应用接口定义对象的行为特征。 使用多态的好处: 当要修改程序并扩充系统时,需要修改的地方较少,对其他部分代码的影响较小。
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论