C#多态

什么是多态

就是子类中的对象,调用自己的方法,而不是父类的方法


怎么实现? 通过类继承 接口  抽象方法来实现      接口常用 能力     抽象常用属性

  1.   {  继承实现,通过
  2.             Anmial a1 = new Anmial();  
  3.             Dog d1 = new Dog();  
  4.             Anmial da = new Dog();  
  5.   
  6.             List<Anmial> list = new List<Anmial>();  
  7.             list.Add(a1);  
  8.             list.Add(d1);  
  9.             list.Add(da);  
  10.             foreach(Anmial a in list)  
  11.             {  
  12.                 a.Say();  
  13.             }  
  14.             Console.ReadKey();  
  15.         }  
  16.     }  
  17.   
  18.     class Anmial  
  19.     {  
  20.         public virtual void Say()  
  21.         {  
  22.             Console.WriteLine("Anmial Say");  
  23.         }  
  24.           
  25.     }  
  26.   
  27.     class Dog : Anmial  
  28.     {  
  29.         public override void Say()  
  30.         {  
  31.             Console.WriteLine("Dog Say");  
  32.         }  
  33.     }  
  34.   
  35.     class Mouse : Anmial  
  36.     {  
  37.   
  38.         public override void Say()  
  39.         {  
  40.             Console.WriteLine("Mouse Say");  
  41.         }  
  42.     }  
  43.   
  44.   
  45.   
  46.   
  47.   
  48.   
  49.    class Cat:Anmial  
  50.   
  51.   
  52.   
  53.   
  54.      {  
  55.   
  56.   
  57.   
  58.   
  59.   
  60.   
  61.        //........没有重写方法的时候,调用的是父类的方法,(因为是继承了父类的方法)  
  62.      }  

运行结果:
Anmial Say
Dog Say
Dog Say

2.抽象类的抽象方法实现多态

[csharp]  view plain copy
  1. class Program  
  2.    {  
  3.        static void Main(string[] args)  
  4.        {  
  5.            Anmial a1 = new Cat();  
  6.            Anmial d1 = new Dog();  
  7.             
  8.            List<Anmial> list = new List<Anmial>();  
  9.            list.Add(a1);  
  10.            list.Add(d1);  
  11.   
  12.            foreach (var a in list)  
  13.            {  
  14.                a.Say();  
  15.            }  
  16.            Console.ReadKey();  
  17.        }  
  18.    }  
  19.    /// <summary>  
  20.    /// 抽象类中只能声明,方法,属性,索引器,字段等,不能被实例化  
  21.    /// </summary>  
  22.    public abstract class Anmial  
  23.    {  
  24.        public void Fly()  
  25.        {  
  26.            Console.WriteLine("飞");  
  27.        }  
  28.        public abstract void Say();//抽象方法,没有方法的实现体  
  29.    }  
  30.   
  31.    class Cat:Anmial  
  32.    {  
  33.   
  34.        public override void Say()  
  35.        {  
  36.            Console.WriteLine("猫叫");  
  37.        }  
  38.    }  
  39.   
  40.    class Dog : Anmial  
  41.    {  
  42.        public override void Say()  
  43.        {  
  44.            Console.WriteLine("狗叫");  
  45.        }  
  46.    }  

3.接口实现多态

[csharp]  view plain copy
  1. class Program  
  2.     {  
  3.         static void Main(string[] args)  
  4.         {  
  5.             Anmial a1 = new Dog();  
  6.             Anmial c1 = new Cat();  
  7.             List<Anmial> list = new List<Anmial>();  
  8.             list.Add(a1);  
  9.             list.Add(c1);  
  10.             foreach(var a in list)  
  11.             {  
  12.                 a.Say();  
  13.             }  
  14.             Console.ReadKey();  
  15.         }  
  16.     }  
  17.     interface Anmial  
  18.     {  
  19.         void Say();  
  20.     }  
  21.   
  22.     class Dog : Anmial  
  23.     {  
  24.         #region Anmial 成员  
  25.   
  26.         public void Say()  
  27.         {  
  28.             Console.WriteLine("狗叫");  
  29.         }  
  30.  
  31.         #endregion  
  32.     }  
  33.   
  34.     class Cat : Anmial  
  35.     {  
  36.         #region Anmial 成员  
  37.   
  38.         public void Say()  
  39.         {  
  40.             Console.WriteLine("猫叫");  
  41.         }  
  42.  
  43.         #endregion  
  44.     }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值