C#——向上转型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/21819771

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端儿

苹果

ctest有n个苹果,要将它放入容量为v的背包。给出第i个苹果的大小和价钱,求出能放入背包的苹果的总价钱最大值。

1002
来自专栏专知

关关的刷题日记73 – Leetcode 21. Merge Two Sorted Lists

关关的刷题日记73 – Leetcode 21. Merge Two Sorted Lists 题目 Merge two sorted linked lists...

3367
来自专栏绿巨人专栏

Category Theory: 01 One Structured Family of Structures

\(G = \{ G, +, e \}\),一个数据集\(G\),一个二元操作符\(+\),和一个幺元\(e\)。

1303
来自专栏醒者呆

融会贯通——最常用的面向对象设计原则“合成复用原则”

复用一个类的时候,多使用对象的组合/聚合的关联关系,而不是继承。 之前提到的“依赖倒转原则”,是以里氏代换原则为基础的实现开闭原则目标的手段,这一条路线涉及到的...

2948
来自专栏玄魂工作室

如何学python 第十七课 类-面向对象的概念

欢迎回来。今天要说的东西将会改变我们写程序的方式。今天我们介绍‘类’(class)。 概述 什么叫‘类’?类,类型。变量类型。从日常生活的感觉来说,‘类’其实...

2714
来自专栏专知

【专知-关关的刷题日记16】Leetcode 88. Merge Sorted Array

题目 Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as on...

36810
来自专栏C/C++基础

设计模式(6)——抽象工厂模式(Abstract Factory Pattern,创建型)

使用设计模式可以提高代码的可复用性、可扩充性和可维护性。抽象工厂模式(Abstract Factory Pattern)属于创建型模式,为创建一组相关或者相互依...

1001
来自专栏趣谈编程

二分查找

面试官:写个二分热热身 我心想:不用热身,热的手已经出汗了 二分查找有着查找速度快,平均性能好等优点,但必须要求待查表为有序表,且插入删除困难,面试比较常考,今...

2046
来自专栏专知

【 关关的刷题日记51】 Leetcode 67. Add Binary

关关的刷题日记 52 – Leetcode 125. Valid Palindrome 题目 Given a string, determine if it i...

3293
来自专栏爱撒谎的男孩

快速排序算法

1896

扫码关注云+社区

领取腾讯云代金券