




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象程序设计 VisualC NET 广东纺织职业技术学院信息工程系李广松Ivan lgs 2010年9月 6 类的继承性 面向对象编程 OOP 的三大特性 封装性继承性多态性本章主要介绍 理解继承和软件继承性理解基类和派生类的概念理解成员修饰符protected和internal使用base引用访问基类成员如何在基类和派生类中使用构造和析构函数通过一个案例 演示继承机制 2 6 1继承概述 父类 子类 动物 继承是软件复用的一种形式 采用这种形式 可吸收现有类的数据和行为 为其赋予新功能 从而创建出新类 软件复用节省了程序开发时间 它还鼓励人们重用经过实践检验和调试的高质量软件 使系统能高效地实现 3 6 2基类和派生类 日常生活中 一个类的对象也是另一个类的对象 如 一个Rectangle 矩形 类 属于 四边形 正方形 平行四边形和梯形同样是四边形 也可以说 Rectangle 矩形类 是从Quadrilateral 四边形 类继承而来的 Quadrilateral类是基类 Rectangle类是派生类 再如 教师类和学生类可以由大学成员类派生 讲师 教授又可以由教师类派生 毕业生和在校生又可以由学生类派生 4 6 3保护成员和内部成员 前面介绍了成员访问修饰符 public和privatepublic成员 可以从程序的任何位置 通过该类 基类或派生类 的对象引用 来访问它 private成员 只能在基类的主体中访问它再介绍另外两个成员访问修饰符 protected 保护的 成员 只能在基类和它的派生类中访问 internal 内部的 成员 可以从同一个程序集 Assembly 中 通过类的对象引用 来访问它 5 6 4基类和派生类的关系 Point Circle Rectangle Cylinder 6 示例 Point类 1 3 publicclassPoint privateintx privateinty publicPoint TODO 在此处添加构造函数逻辑 构造函数publicPoint intxValue intyValue this x xValue this y yValue 点 Point 类具有以下属性 坐标X坐标Y且具有以下方法 ToString 点的字符串表示形式 7 示例 Point类 2 3 属性 坐标XpublicintX get returnthis x set this x value 没有添加验证代码 属性 坐标YpublicintY get returnthis y set this y value 没有添加验证代码 8 示例 Point类 3 3 返回点类的字符表示形式publicoverridestringToString return x y 9 Point类演示 Pointpoint newPoint 72 115 stringoutput X坐标是 point X n Y坐标是 point Y n point X 10 point Y 10 output npoint的新位置是 point MessageBox Show output Point类演示 示例代码位于 CSharp示例 第6课 PointCirlceCylinder 10 Circle类 圆 Ciecle 类具有以下属性 坐标X坐标Y半径Radius且具有以下方法 Diameter 求直径CircumFerence 求周长Area 求圆的面积ToString 圆的字符串表示形式 11 Circle类 没有使用继承 1 4 publicclassCircle privateintx privateinty privatedoubleradius publicCircle TODO 在此处添加构造函数逻辑 构造函数publicCircle intxValue intyValue doubleradiusValue this x xValue this y yValue this radius radiusValue 12 Circle类 没有使用继承 2 4 属性 坐标XpublicintX get returnthis x set this x value 没有添加验证代码 属性 坐标YpublicintY get returnthis y set this y value 没有添加验证代码 13 Circle类 没有使用继承 3 4 属性 半径RadiuspublicdoubleRadius get returnthis radius set if value 0 this radius value 方法 计算圆的直径DiameterpublicdoubleDiameter returnthis Radius 2 0 14 Circle类 没有使用继承 4 4 方法 计算圆的周长CircumFerencepublicdoubleCircumFerence returnMath PI Diameter 属性 计算圆的面积AreapublicdoubleArea returnMath PI Math Pow this Radius 2 返回Circle类的字符表示形式publicoverridestringToString return 圆心坐标 X Y 半径 Radius 15 Circle类演示 Circlecircle newCircle 37 43 2 5 stringoutput 圆的X坐标是 circle X n Y坐标是 circle Y n 半径是 circle Radius n circle X 2 circle Y 2 circle Radius 4 25 output 新圆的位置和半径是 circle n output 直径是 String Format 0 F circle Diameter n output 周长是 String Format 0 F circle CircumFerence n output 面积是 String Format 0 F circle Area n MessageBox Show output Circle类演示 示例代码位于 CSharp示例 第6课 PointCirlceCylinder 16 使用类继承 以上两个类 Point类和Circle类 中的大部分代码非常类似 程序员最怕的是 重复 劳动 难道需要使用这种 复制 和 粘贴 的方法吗 这将会造成程序员最害怕的 代码维护噩梦 我们要用一种更优雅的类构造方法 该方法突出了继承的优势 下面的例子说明了这一点 我们将创建和测试一个Circle2类 该类从Point类那里继承了变量x和y 及属性X和Y 注意C 语法中是如何实现类继承的 17 Circle2类 使用继承 publicclassCircle2 Point privatedoubleradius publicCircle2 publicCircle2 publicdoubleRadius publicdoubleDiameter publicdoubleCircumFerence publicdoubleArea publicoverridestringToString return 圆心坐标 X Y 半径 Radius 在这里 将部分代码省略了 其中的代码与Circle类的相应代码是相同的 18 Circle2类 编译出错 为什么编译会出错 如何改正 为了让Circle2类能直接访问Point类的成员变量x和y 我们可以在Point类中将这些变量声明为protected 基类的保护成员可以从基类或其派生类中访问 下述示例的Point2类就是这样改造的类 除了x和y的访问属性说明为protected以外 其它与Point类相同 19 Point2类 publicclassPoint2 protectedintx protectedinty publicPoint2 publicPoint2 intxValue intyValue 属性 坐标XpublicintX 属性 坐标YpublicintY 返回点类的字符表示形式publicoverridestringToString 20 Circle2类 从Point2类继承 publicclassCircle2 Point2 privatedoubleradius publicCircle2 publicCircle2 publicdoubleRadius publicdoubleDiameter publicdoubleCircumFerence publicdoubleArea publicoverridestringToString return 圆心坐标 X Y 半径 Radius 21 Circle2类演示 Circle2circle newCircle2 37 43 2 5 stringoutput 圆的X坐标是 circle X n Y坐标是 circle Y n 半径是 circle Radius n circle X 2 circle Y 2 circle Radius 4 25 output 新圆的位置和半径是 circle n output 直径是 String Format 0 F circle Diameter n output 周长是 String Format 0 F circle CircumFerence n output 面积是 String Format 0 F circle Area n MessageBox Show output Circle类演示 示例代码位于 CSharp示例 第6课 PointCirlceCylinder 22 使用protected成员带来的相关问题 如同以前使用public一样 在基类中使用protected成员 会破坏基类的封装性 因为派生类在使用基类的成员 不知道存在哪些约束 可能会在派生类中给这些基类成员赋予了无效的值 另外一个问题是 派生类的实现可能会依赖于基类 如果基类的成员发生了变化 可能会导致它所有的派生类都会发生改变 将基类字段声明为private而非protected 能使程序员在更改基类实现时 不必更改派生类的实现 如有可能 要避免在基类中包括受保护数据 相反 应使用非私有属性和访问私有数据的方法 确保对象维持一致性的状态 23 Circle3类 直接继承自Point类 在派生类中 如何访问基类的私有成员呢 通过基类中对外公开的属性或方法 使用base引用进行访问通过下页的示例代码和演示大家可以看到这一点 24 Circle3类 直接继承自Point类 publicclassCircle3 Point privatedoubleradius publicCircle3 publicCircle3 intxValue intyValue doubleradiusValue base xValue yValue this radius radiusValue publicdoubleRadius publicdoubleDiameter publicdoubleCircumFerence publicvirtualdoubleArea publicoverridestringToString return 圆心坐标 base ToString 半径 radius 25 Circle3类演示 Circle3circle newCircle3 37 43 2 5 stringoutput 圆的X坐标是 circle X n Y坐标是 circle Y n 半径是 circle Radius n circle X 2 circle Y 2 circle Radius 4 25 output 新圆的位置和半径是 circle n output 直径是 String Format 0 F circle Diameter n output 周长是 String Format 0 F circle CircumFerence n output 面积是 String Format 0 F circle Area n MessageBox Show output Circle类演示 示例代码位于 CSharp示例 第6课 PointCirlceCylinder 26 案例演示 三级继承层次结构 让我们来看一个更现实的继承示例 它牵涉到一个三级的Point Circle Cylinder层次结构 Point Circle3 Cylinder 除继承了Circle3类的属性和方法外 还应具有 Height 圆柱休高度Volumn 求体积方法并重载 Area 求圆柱体表面积 27 Cylinder类 继承自Circle3类 1 4 publicclassCylinder Circle3 privatedoubleheight publicCylinder TODO 在此处添加构造函数逻辑 有4个参数的构造函数publicCylinder intxValue intyValue doubleradiusValue doubleheightValue base xValue yValue radiusValue this height heightValue 28 Cylinder类 继承自Circle3类 2 3 属性 圆柱体高度HeightpublicdoubleHeight get returnthis height set if value 0 this height value publicoverridedoubleArea return2 base Area base CircumFerence Height 29 Cylinder类 继承自Circle3类 3 3 publicdoubleVolumn returnbase Area this Height publicoverridestringToString returnbase ToString 高度 this Height 示例代码位于 CSharp示例 第6课 PointCirlceCylinder 30 Cylindercylinder newCylinder 12 23 2 5 3 7 stringoutput 圆柱体的X坐标是 cylinder X n Y坐标是 cylinder Y n 半径是 cylinder Radius n 高度是 cylinder Height n cylinder X 2 cylinder Y 2 cylinder Radius 4 25 cylinder Height 10 output n新圆柱体的位置 半径和高度是 cylinder n n output 直径是 String Format 0 F c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025国考保定市林业草原岗位申论题库含答案
- 2025国考临汾市外交业务岗位申论必刷题及答案
- 2025年德州市中考英语试卷真题(含答案)
- 2025国考南京市资产管理岗位申论预测卷及答案
- 2025国考阳泉市证券监管岗位行测高频考点及答案
- 2025国考安徽金融监管局申论综合分析题库含答案
- 2025国考乌兰察布市证券监管岗位行测高频考点及答案
- 2025国考通辽市林业草原岗位行测必刷题及答案
- 2025国考福建移民管理局申论模拟题及答案
- 2025国考陕西金管法律专业科目题库含答案
- 中药材种植技术实操指导方案
- 2025年河南入团考试题目及答案
- 2025-2026学年高一上学期第一次月考物理试卷(北京)
- 中国移动长春市2025秋招笔试性格测评专练及答案
- 2.1.4大气的水平运动课件高中地理鲁教版必修一
- 2025年雅思写作真题解析试卷及答案
- 动火作业现场安全防护设施布置与维护更新方案
- 2025国家统一法律职业资格考试考试真题及答案
- 2025年高考化学试卷(湖南卷)(解析卷)
- 河湖划界评审汇报
- 小学英语词汇语法知识点归纳总结
评论
0/150
提交评论