第四节 继承_Done.ppt

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 继承 示例 用面向对象的思想建立一个简单的绘图程序。假设绘图程序中暂时就处理矩形和圆两种图元。 考虑一下如何建立类。 示例 class Rect { int lineColor; int fillColor; Int lineType; double x,y,x1,y1; public void Draw(){} public DrawLine(){} public DrawPoint(){} public circumcircle(){} } 示例 Rect和Circle类中出现了很多相同的变量和方法,有些方法仅仅是方法声明一样,但是实现不一样,有些是完全一下。 编程程序有一条规则:尽量避免代码直接重复。(如函数) 继承 继承可以解决类与类之间代码重复的问题。 把类Rect和类Circle中共同的代码提取出来组建一个新的类。 示例 class Shape { public int lineColor; public int fillColor; public Int lineType; public void Draw(){} public DrawLine(){} Public DrawPoint(){} } 把类Rect和类Circle中不同的代码(包括实现不同和函数名称不同)仍然放在各自的类中。 示例 class Rect :Shape { double x,y,x1,y1; public void Draw(){} public circumcircle(){} } 继承 通过继承类Rect和类Circle拥有类 Shape所有的成员变量和成员方法。 类 Shape称为基类 类Rect和类Circle称为派生类 继承 派生类继承基类的一切,拥有了基类的一切内容 派生类是对基类的扩展 派生类不能删除它所继承的任何成员 继承是类与类之间的一种功能复用方法 基类是对事物一种更抽象的反映 访问继承的成员 除了在基类中声明为private访问权限的成员外,其他成员都能直接在派生类中访问 protected : 继承访问权限,是指在派生类和所属类中可以访问的权限 除了private访问权限外,其他继承来的成员访问权限不变 成员的访问权限 隐藏基类的成员 在某些情况下,基类中成员不能满足派生类的要求,但在派生类中不能删除它,我们又需要在派生类中重新声明与基类成员相同的成员(成员变量和成员方法),可以使用new修饰符隐藏基类的成员。 访问隐藏基类的成员 有些情况下派生类需要访问被隐藏的继承成员,可以使用基类访问表达式访问隐藏的基类成员 派生类构造函数的执行 执行顺序: 初始化派生类实例成员 初始化基类实例成员 调用基类的构造函数 执行派生类的构造函数 派生类构造函数的执行 派生类构造函数的执行 默认情况下,基类无参数的构造函数被调用。也可以指定调用基类中某个构造函数,采用base关键字。 派生类构造函数的执行 需要注意的是基类构造函数中参数由派生类中构造函数的参数传递。 派生类构造函数的执行 继承 继承的层次是没有限制的 但直接基类只能有一个,单继承 Object基类 除了特殊的类Object外,所有的类都是派生类。 基类和派生类是一个相对的概念 所有的类最底层基类是Object 这两种声明方式是等价的 Object类提供的功能 使用基类的引用 派生类的实例由基类的实例加上派生类附加的成员组成。派生类的引用指向整个类对象,包括基类部分。 如果有一个派生类对象的引用,就可以获取该对象基类部分的引用,使用类型转换运算符把该引用转换为基类类型。 基类与派生类之间的类型转换 如果知道基类实际所指的派生类对象是谁,转化为相应的派生类是安全的。 练习题 先考虑以下几个动物 鸡:眼睛、羽毛等等,能吃、会走路、会飞、会叫、会下蛋、可以孵小鸡 牛:眼睛、四条腿等等 能吃、会走路、会叫、会耕地 面向幼儿的认识动物小软件 增加新的动物: 鸭 会游泳 鹅 会游泳 马 奔跑 羊 * class Circle :Shape { double x,y,r; public void Draw(){} public calcRect(){} } 等价的构造函数形式 向下转化,风险 基类 派生类 向上转化,安全

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档