首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#——向上转型

C#——向上转型

作者头像
DannyHoo
发布2018-09-13 11:25:51
6700
发布2018-09-13 11:25:51
举报
文章被收录于专栏:Danny的专栏Danny的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1336861

       在学习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();”呢?

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年03月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档