C#多态

多态

我的理解就是同一个类型的实例调用“相同”的方法,产生的结果是不同的

重载:同一作用域下方法名相同但参数列表不相同

重写:被重写的方法一定是虚方法,用virtual标识,重写加上override标识。

父类当中定义

 public virtual void EatFood()
        {
            Console.WriteLine("Animal吃东西");
        } 

子类当中定义

  public override void EatFood()
        {
            Console.WriteLine("Cat吃东西");
            //base.EatFood();
        }

虚方法

 public virtual void EatFood()
        {
            Console.WriteLine("Animal吃东西");
        }

注意virtual在本类中就相当于没有virtual,对子类的ovrride来说,才是虚方法。
所以这么写不能实现多态,而且会报错

       public virtual void EatFood()
        {
            Console.WriteLine("Animal吃东西");
        }

       public void EatFood()
        {
            Console.WriteLine("Animal吃东西");
        }

抽象方法:

public abstract class Biology
    {
        public abstract void Live();
    }
    public class Animal : Biology
    {
        public override void Live()
        {
            Console.WriteLine("Animal重写的抽象方法");
            //throw new NotImplementedException();
        } 

隐藏方法

  public void Sleep()
        {
            Console.WriteLine("Animal Sleep");
        }

派生类当中

 new public void Sleep()
        {
            Console.WriteLine("Cat Sleep");
        }

注意加载父类的时候会先把父类的构造方法执行一边,然后执行子类构造方法 , 调用父类的代码块用base,调用当前类用this

引用,原blog地址:http://www.cnblogs.com/zhangkai2237/archive/2012/12/20/2826734.html

原文地址:https://www.cnblogs.com/wuqingzangyue/p/5735677.html