C#——向上转型

来源:互联网 发布:百度人工智能有哪些 编辑:程序博客网 时间:2024/05/22 13:47

       在学习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类型的对象,但运行结果并不是我们预期的那样,而是显示“我是鸟,我要吃东西!”。

       

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

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

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

 

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

 

2 0
原创粉丝点击