- 1、本文档共31页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
10 使用继承.ppt
10 使用继承 10. 类的继承与多态 面向对象编程(OOP)的三大特性: 封装性 继承性 多态性 本章主要介绍: 理解继承和软件继承性 理解基类和派生类的概念 理解成员修饰符protected 使用base引用访问基类成员 如何在基类和派生类中使用构造和析构函数 通过一个案例,演示继承机制 10.1 继承概述 继承是软件复用的一种形式。采用这种形式,可吸收现有类的数据和行为,为其赋予新功能,从而创建出新类。软件复用节省了程序开发时间。它还鼓励人们重用经过实践检验和调试的高质量软件,使系统能高效地实现。 10.2 基类和派生类 日常生活中,一个类的对象也是另一个类的对象。 如,一个Rectangle(矩形)类“属于”四边形(正方形、平行四边形和梯形同样是四边形)。也可以说,Rectangle(矩形类)是从Quadrilateral(四边形)类继承而来的。 Quadrilateral类是基类, Rectangle类是派生类。 再如,教师类和学生类可以由大学成员类派生,讲师、教授又可以由教师类派生,毕业生和在校生又可以由学生类派生。 10.3 保护成员和内部成员 前面介绍了成员访问修饰符:public和private public成员,可以从程序的任何位置,通过该类(基类或派生类)的对象引用,来访问它。 private成员,只能在基类的主体中访问它 再介绍另外两个成员访问修饰符: protected(保护的)成员,只能在基类和它的派生类中访问。 internal(内部的)成员,可以从同一个程序集(Assembly)中,通过类的对象引用,来访问它。 10.4 基类和派生类的关系 10.4.1:Point类 Point类演示 10.4.2 Circle类 Circle类:没有使用继承 Circle类:没有使用继承 Circle类演示 使用类继承 以上两个类(Point类和Circle类)中的大部分代码非常类似。程序员最怕的是“重复”劳动,难道需要使用这种“复制”和“粘贴”的方法吗?这将会造成程序员最害怕的“代码维护噩梦”。 我们要用一种更优雅的类构造方法,该方法突出了继承的优势。下面的例子说明了这一点。 我们修改Circle类,该类从Point类继承了变量x和y,及属性X和Y。注意C#语法中是如何实现类继承的。 Circle类:使用继承 Circle类:编译出错? 为什么编译会出错?如何改正? 修改过的Point类 这时,使用继承的Circle类可以正常运行了 启用属性调试 使用protected成员带来的相关问题 如同以前使用public一样,在基类中使用protected成员,会破坏基类的封装性。因为派生类在使用基类的成员,不知道存在哪些约束,可能会在派生类中给这些基类成员赋予了无效的值。 另外一个问题是,派生类的实现可能会依赖于基类。如果基类的成员发生了变化,可能会导致它所有的派生类都会发生改变。 将基类字段声明为private而非protected,能使程序员在更改基类实现时,不必更改派生类的实现。 如有可能,要避免在基类中包括受保护数据,相反,应使用非私有属性和访问私有数据的方法,确保对象维持一致性的状态。 Circle类:继承自Point类 在派生类中,如何访问基类的私有成员呢? 通过基类中对外公开的属性或方法。 使用base引用进行访问 通过下页的示例代码和演示大家可以看到这一点。 Circle类:继承自Point类 Circle类演示 10.4.3 案例演示:三级继承层次结构 让我们来看一个更现实的继承示例,它牵涉到一个三级的Point-Circle-Cylinder层次结构 Cylinder类:定义字段与属性 Cylinder类:构造函数 Cylinder类:定义方法 Cylinder类演示 10.4.4 类的多态性演示 更新后的Circle类和Cylinder类 10.5 上机 完成实验报告6。 给Point-Circle-Cylinder应用程序添加一个圆锥体类(Cone),该类继承自Circle类,并具有Height属性,并重载基类的Area和Volume方法。测试类的多态性。 请大家上机时,将上课所讲的示例调试成功,着重理解类的继承性和类的多态性。 院级精品课程 面向对象程序设计 安徽机电职业技术学院 信息工程系 汪学文(wxwOOP@126.com) 2014年10月 (使用VS 2010和C#) 父类 子类 动物 大象 猫 Point Circle Rectangle Cylinder 点(Point)类具有以下属性: 坐标X 坐标Y 且具有以下方法: ToString( ):点的字符串表示形式 示例代码位于“Lesson10\Inheritance” 示例代码位于“Lesson10\Inheri
文档评论(0)