接口是实现多态的一种
多态:一个父类Animal[动物],派生了Wolf[狼]和Sheep[羊]两个子类,由于每个子类都有其不同的代码实现,所以当用父类来引用这些子类时,同样的操作而可以表现出不同的操作结果,这就是所谓的多态。- class Animal
- {
- public virtual void Eat()
- {
- Console.WriteLine("动物都要吃东西");
- }
- }
- class Wolf : Animal
- {
- public override void Eat()
- {
- Console.WriteLine("我是狼,我要吃羊!");
- }
- }
- class Sheep : Animal
- {
- public override void Eat()
- {
- Console.WriteLine("我是羊,我要吃草!");
- }
- }
复制代码 然后在Main方法里面去调用它们- class Program
- {
- private static void Main(string[] args)
- {
- overrideDemo();
- Console.ReadKey();
- }
- private static void overrideDemo()
- {
- //创建一个父类的数组
- Animal[] animals = new Animal[] { new Wolf(), new Sheep() };
- foreach (var item in animals)
- {
- item.Eat();
- }
- }
- }
复制代码
父类的Eat方法根本就没有运行,也就是数组虽然是Animal类型,但是他们分别是Wolf类和Sheep类的实例,而这两个类对Eat方法进行了override,因而执行的是他们重写的函数,而接口也是类似的,不同的是我们不需要override关键字。- public interface IAnimal
- {
- void Eat();
- }
- public class Wolf : IAnimal
- {
- public void Eat()
- {
- Console.WriteLine("我是狼,我要吃羊!");
- }
- }
- public class Sheep : IAnimal
- {
- public void Eat()
- {
- Console.WriteLine("我是羊,我要吃草!");
- }
- }
复制代码 运行结果和上面的类似,虽然类型相同,但是是谁的实例就调用谁的方法,彼此独立。
所以你也可以理解为接口可以实现多态的。
|