




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录 第1章计算机 因特网 万维网和C 第2章VisualStudio NET集成开发环境第3章C 编程介绍第4章控制结构 一 第5章控制结构 二 第6章方法第7章数组第8章基于对象的编程第9章面向对象编程 继承第10章面向对象编程 多态性第11章异常处理第12章图形用户界面概念 一 第13章图形用户界面概念 二 第14章多线程第15章字符 字符串和正则表达式第16章图形和多媒体第17章文件和流第18章数据库 SQL和ADO NET第19章可扩展标记语言 XML 第20章ASP NET Web窗体和Web控件第21章ASP NET和Web服务第22章网络 基于流的套接字和数据包第23章数据结构和集合第24章可访问性 第一部分 NET综述 第二部分结构化编程 第三部分面向对象编程 第四部分C 相关应用 第五部分C 应用扩展 第10章面向对象编程 多态性 10 1概述 继承和多态都是开发复杂软件时要用到的重要技术 多态性能让我们编写出以常规方式来处理的大量相关类 并简化了向系统添加新的类和功能 有了多态性 就能设计和实现更容易扩展的系统 多态性定义 派生类对象可以被视为基类对象来处理如果基类引用引用了一个派生类对象 就可以将这个基类引用转换为该对象实际的数据类型 并将该对象作为这种实际的数据类型来处理 引用在程序中的体现是 请看代码代码演示了如何将派生类对象分配给基类引用 然后通过强制类型转换 将基类引用转换为派生类引用 10 2派生类对象转换为基类对象 第21行代码将circle1 一个派生类对象的引用 分配给point2 一个基类的对象的引用 在C 中 由于继承是 属于 关系 所以可以将一个派生类对象分配给一个基类对象 反之则很危险 第23 24行中 当C 碰到一个virtual 虚拟 方法调用 如ToString方法 时 它会根据被调用方法的对象类型 而不是引用该对象的引用类型 来判断被调用方法的版本 本例中 point2引用了一个Cricle对象 所以C 调用了Circle的ToString方法 而不是Point的ToString方法 这个调用哪个方法的判断便是多态性的一个例子 staticvoidMain string args Pointpoint1 newPoint 30 50 Circlecircle1 newCircle 120 89 2 7 Pointpoint2 circle1 1 基类引用派生类对象output point2 ToString 访问的是Circle类的ToString方法Circlecircle2 Circle point2 2 基类引用可以转换为派生类引用if point1isCircle 判断左操作符类型是否与右操作符一致 circle2 Circle point1 无法将基类对象直接转化为派生类对象 部分代码 基类引用和派生类引用与基类对象和派生类对象有4种组合方式 1 用基类引用来引用基类对象 2 用派生类引用来引用派生类对象 3 用基类引用来引用派生类对象 4 用派生类引用无法直接引用基类对象 需要的过程为 首先定义基类引用来引用派生类对象 然后将基类引用转换为派生类引用 对于大型程序中的对象 判断其类型的方法之一式使用switch结构 但是 使用switch逻辑会使程序面临各种各样的问题 多态性编程可以消除不必要的switch逻辑 使用C 的多态性机制来执行对应的逻辑 程序员可以避免与switch逻辑相关的常见错误 10 3类型字段和switch语句 10 4多态性示例 SpaceObjectDrawYourself PlutonianDrawYourself VenutianDrawYourself SpaceShipDrawYourself LaserBeamDrawYourself MartianDrawYourself 定义从没有打算实例化任何对象的类 称为抽象类 通常作为基类 一般称为抽象基类 抽象类通常包含一个或多个抽象方法或者抽象属性 对类而言 如果对象可以从它那里被实例化 可以把这样的类称为具体类 10 5抽象类和方法 关键字abstract用于将方法和属性声明为抽象 被声明为abstract的方法和属性不会提供实现部分 试图这样做是语法错误 每个具体的派生类都必须覆盖基类的所有抽象方法和属性 利用关键字override 并提供这些方法和属性的具体实现部分 其中包含抽象方法的任何类都必须被声明为abstract 抽象方法和虚拟方法的区别在于 虚拟方法有一个实现部分 并为派生类提供了覆盖该方法的选项 相反 抽象方法没有提供实现部分 强制派生类覆盖方法 否则派生类不能成为具体类 多态性特别适用于实现分层式软件系统 在面向对象的编程中 定义一个能遍历容器 如一个数组 内所有对象的迭代器类是很常见的 迭代器通常用于多态性编程 10 6示例 一 接口和实现的继承 Shape Point2 Circle2 Cylinder2 关键字sealed 密封 适用于方法和类 目的是防止被覆盖和继承 声明为sealed的方法不能在派生类中被覆盖 声明为static的方法和声明为private的方法都是隐式的密封方法 使用密封类对运行时的性能略有提升 10 7密封的类和方法 10 8示例 二 使用多态性的工资发放系统 Employee Boss Commissionwroker PieceWorker HourlyWorker 接口适用于没有可继承的实现时 也就是没有示例变量和默认的方法实现时 抽象类最好用于继承关系中的对象提供数据和服务 接口则用于提供这样的服务 这些服务将完全不同的 仅通过那个接口而关联的各个对象集合在一起 对于完全不同的类的对象 接口为它们提供了统一的方法和属性集 利用这些方法和属性 程序可以多态地处理这些完全不同的类的对象 10 9示例 三 创建和使用接口 IAge Person Tree IShape Point3 Circle3 Cylinder3 有些时候 对象有必要将方法作为参数传给其他方法 C 不允许将方法引用作为参数直接传给其他方法 但它提供了封装有一系列方法引用的特殊类 名为委托 包含方法引用的委托对象可传给另一个方法 此时 不是直接发送一个方法引用 相反 对象是发送委托实例 其中包含了我们希望发送的方法引用 然后 接收委托引用的方法可调用委托中包含的方法 10 11委托 SingleCast Delegate类 MultiCast MulticastDelegate类 要使用委托 首先必须声明一个 在委托的声明中 指定一个方法头 参数及返回值 如方法引用要包含一个委托对象中 该方法必须拥有与
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 规划公寓建筑组团方案设计
- 2025年职业能力考试题及答案
- 供暖散热器营销推广方案
- 2025年潍坊铲车考试试题及答案
- 2025年农业推广学试题及答案
- 第3课 阈值控制便生活说课稿-2025-2026学年小学信息科技泰山版2024六年级下册-泰山版2024
- DB65T 4389-2021 雷电灾害风险区划技术规范
- 2025年新能源汽车电池管理系统在电动垃圾车领域的应用报告
- DB65T 4479-2021 鲜食桃果品质量分级
- DB65T 4466-2021 特种设备安全风险分级管控工作导则
- 重庆市南开中学高2025-2026学年高三上学期开学第一次检测语文试卷
- (人教版2017课标)高中物理必修第三册 第十章综合测试及答案03
- 脑血管超声课件
- 机械检验考试试题及答案
- 汉语水平考试HSK四级真题4-真题-无答案
- 大疆:2024-2025农业无人机行业白皮书
- 2025年儿科学测验试卷答案及解析
- 地坪硬化合同(标准版)
- 2025-2026学年人音版(简谱)(2024)初中音乐七年级上册教学计划及进度表
- 6 有趣的纸艺制作教学设计-2025-2026学年小学美术广西版五年级上册-广西版
- 2025年中国邮政集团有限公司安徽省分公司社会招聘笔试参考题库附答案解析
评论
0/150
提交评论