第七章 继承和多态性.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第七章 继承和多态性

C#语言程序设计 李朔 @数信学院 Email: chn.nj.ls@ C#语言程序设计基础 第7章 继承和多态 继承 多态性 接口与继承 扩展方法 继承 一些类有许多共同的特征,可以提取(抽象)到一个单独的类中 汽车、火车、轮船-“行驶”、“载货”等功能 抽象到一个单独的类(或接口)“交通工具” 汽车、火车和轮船继承(或实现)“交通工具” 继承可提高软件模块的可重用性 由于继承结构中,父类对子类的抽象,使程序有较好的可扩展性 基类和派生类 C#中的类不支持多继承 为避免结构过于复杂,不允许一个派生类继承多个基类 一个派生类只可以继承一个基类,同时可以实现多个接口 .NET类库就是一个典型的面向对象的实现:System.Object类是其他所有类的基类,所有C#数据类型都是从类中衍生出来的 构造类的层次结构有两种基本方式 自顶向下:从基础类型开始向下分解、不断得到新的派生类型 “联系人”-“亲属”、“同事”、“同学” 自底向上:对现有的一组具体类型进行抽象,得到更为抽象的新的具体类型 “储蓄卡”、“信用卡”、“借记卡”等-“银行卡” 例7_1 隐藏基类成员 有时并不希望派生类一成不变地继承基类中的所有成员。 如:例P151 base关键字 ????public?PayCard(string?id,string?password,decimal?money =?0):base(id,password,money)???{} C#中base关键字用于访问基类的成员,上述代码表示PayCard的构造函数调用了基类BankCard的构造函数来对各个字段进行赋值 当基类有默认构造函数时,派生类不显示调用基类构造函数时,会自动调用基类默认构造函数 若基类定义了带参的构造函数,而没有定义默认构造函数时,派生类构造函数需通过base关键字来指明使用哪一个基类构造函数 当派生类成员隐藏了基类成员时 通过base关键字引用的成员为基类成员 通过this关键字引用(可省略)的成员为派生类成员 Public new void Query() { base.Query(); …. } 对象生命周期 类的实例在创建时调用其构造函数,在销毁时调用其析构函数 派生类中,其对象 在创建时将自顶向下地调用各级基类的构造函数,最后调用自身的构造函数 销毁时首先调用自身的析构函数,而后自底向上地调用各级基类的析构函数 书例P153 7_2.cs 注意System.GC.Collect()-强制立即收回,但微软建议不要手动调用GC.Collect(),影响性能 多态性 “多态性” 同一事物在不同的条件下表现出不同的形态。 在面向对象的程序设计理论中,多态性的定义是:同一操作作用于不同的类的实例,将产生不同的执行结果,即不同类的对象收到相同的消息时,得到不同的结果。 先看一个例子,例 成员的虚拟和重载 派生类可以隐式转换成基类对象, P155 一般情况下,根据对象的声明类型来调用的(即使派生类定义中隐藏了基类的同名方法,overwrite) 当希望按照对象的实际类型来调用方法时,可利用多态性技术 基类中使用关键字virtual修饰的方法叫做虚拟方法 派生类中使用关键字override修饰其定义的同名方法,叫重载方法(override) 在运行时,将根据对象的实际类型进行调用 注意:在3.3.3节中介绍的方法重载(overload),是指方法名称相同而标识不同,这里所说的重载(override)方法是指基类方法和派生类重载之后的方法名称相同,但属于两个不同的方法 overwrite, overload ,override三个概念 .NET类库设计中大量应用了多态性技术,一个最为常用的方法是ToString() 该方法返回当前对象的类型说明通过重载ToString()方法,可以定义最适合本身的字符串表示形式 如数值类型返回数字内容,枚举类型则返回枚举值说明等 例P7_4 说明: 如果在派生类中使用overide关键字定义了重载方法,即表示允许该类之后的派生类继续重载这个方法(重载方法本质上是一种虚拟方法) 基类中定义虚拟方法,即暗示希望在派生类中继承并重实现该方法 虚拟方法不能是私有的,派生类对重载方法的访问限制应与基类中的虚拟方法相同(public/protected) 抽象类和抽象方法 现实生活中的抽象概念,本身没有具体的对象,只有派生类对象才是真实存在的 例如: 图形-抽象类, 派生类 三角形 椭圆 多边形 武器-抽象类, 派生类 刀 剑 枪 炮 抽象类的作用主要是为派生类提供一个公共的界面(构建蓝图) 例 注意点: 抽象类的派生类也可以是抽象类 若某个非抽象类继承了一个抽象类,它就必须为抽象类中的所有抽象方法提供实现代码 包含抽象方法

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档