C#——向上转型

       在学习C#的过程中,一些基础知识比如数据类型、控制结构、数组等都与之前接触的语言大同小异,还能够理解,但是向上转型这个概念还是第一次遇到。

       学习了一下后大致理解如下:

       向上转型就是将子类转型成父类,对象可以作为它本身的类型使用。

       先来看一段代码:

public class Animal
    {
        public virtual void Eat()
        {
            Console.WriteLine("我是动物,我要吃东西!");
        }
    }
    public class Bird : Animal
    {
        public override void Eat()
        {
            Console.WriteLine("我是鸟,我要吃东西!");
        }
    }
    class Test
    {
        static void Main(string[] args)
        {
            Animal animal = new Bird();  //向上转型
              animal.Eat();
        }
    }

       上述例子中我们定义了一个动物类(其中有吃东西的方法),鸟类继承了动物类(重写了基类中吃东西的方法),主函数中生命animal为Animal类型的对象,但运行结果并不是我们预期的那样,而是显示“我是鸟,我要吃东西!”。

        C#——向上转型_第1张图片

        对于这个例子。声明animal的时候,animal的类型为Animal。但是animal所指向的实例为Animal的子类即Bird。

           当然有向上转型就有向下转型,方式当然也是相反,即将父类转换成子类。

        在网上看到一个问题,有人说“如果子类中所需要的功能在父类中存在,就使用向上转型;如果父类所需要的功能在子类中存在,就使用向下转型”,但是如上例所述,Bird是Animal的子类,Bird已经继承了Animal中的方法,为什么还要使用向下转型呢?即为什么定义Animal的时候要用“Animal animal=new Bird();”而不是“Bird animal=new Bird();”呢?

 

          恳请朋友们不吝赐教,提出宝贵的意见和建议。

 

你可能感兴趣的:(C#——向上转型)