C#——向上转型

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


20.png


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


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


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


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


相关文章
|
11月前
|
JavaScript 前端开发 编译器
ES6 代码转成 ES5 代码的实现思路是什么
ES6 代码转成 ES5 代码的实现思路主要是通过编译器将新的语法结构和特性转换为旧版本的 JavaScript 代码,以确保在不支持 ES6 的环境中可以正常运行。常用的工具如 Babel 可以自动完成这一过程。
|
10月前
|
传感器 机器学习/深度学习 人工智能
自动驾驶汽车中的AI:从概念到现实
【10月更文挑战第31天】自动驾驶汽车曾是科幻概念,如今正逐步成为现实。本文探讨了自动驾驶汽车的发展历程,从早期的机械控制到现代的AI技术应用,包括传感器融合、计算机视觉、路径规划和决策控制等方面。尽管面临安全性和法规挑战,自动驾驶汽车在商用运输、公共交通和乘用车领域展现出巨大潜力,未来将为人类带来更安全、便捷、环保的出行方式。
|
机器学习/深度学习 数据挖掘 开发者
|
NoSQL Ubuntu 关系型数据库
轻松上手 Docker:一键部署常用软件环境指南
轻松上手 Docker:一键部署常用软件环境指南
1546 0
|
开发者
🔥揭秘JSF导航:如何轻松驾驭页面跳转与流程控制?🎯
【8月更文挑战第31天】在 JavaServer Faces(JSF)中,导航规则是控制页面跳转和流程的关键。本文详细介绍 JSF 的导航规则,包括转发和重定向等跳转方式,并通过 `faces-config.xml` 文件配置示例展示如何实现不同场景下的页面跳转及流程控制,帮助开发者有效管理应用程序的页面流和用户交互,提升应用质量。
140 0
|
存储 JSON 自然语言处理
大模型服务平台百炼之模型训练与调优实践分享|快来围观~
模型调优是通过Fine-tuning训练模式提高模型效果的功能模块,作为重要的大模型效果优化方式,用户可以通过构建符合业务场景任务的训练集,调整参数训练模型,训练模型学习业务数据和业务逻辑,最终提高在业务场景中的模型效果。
2915 9
|
网络协议 API 调度
Python网络编程基础(Socket编程)asyncio库的使用
【4月更文挑战第12天】在Python的网络编程中,除了直接使用底层的Socket API,还有许多高级的网络编程库可以帮助我们更简洁、高效地构建网络应用。这些库通常提供了异步IO、事件循环、协议支持等功能,使得开发者能够更专注于业务逻辑的实现。其中,`asyncio`库是Python 3中引入的一个强大的异步IO库,它为我们提供了编写异步代码的基础设施。
|
算法 安全 Go
Go切片删除元素错过这篇你就out了
Go切片删除元素错过这篇你就out了
3609 0
|
网络协议 程序员 API
[笔记] Microsoft Windows网络编程《一》WinSock简介(三)
[笔记] Microsoft Windows网络编程《一》WinSock简介(三)
482 0
|
存储 Windows
下载Windows ISO镜像的方法
一、镜像介绍 1、大概介绍 .iso 是电脑上镜像的存储格式之一,所以通常在电脑中以后缀.iso命名,俗称iso镜像文件。 2、详细介绍 ISO镜像文件_百度百科 二、下载Windows 11镜像 1、Windows 11 官方下载网址 https://www.microsoft.com/zh-cn/software-download/windows11 2、步骤 点击官网地址,进入windows11官网,找到下载 Windows 11 磁盘映像 (ISO)
4887 0