第五讲-面向对象编程(二)继承封装和多态.ppt_第1页
第五讲-面向对象编程(二)继承封装和多态.ppt_第2页
第五讲-面向对象编程(二)继承封装和多态.ppt_第3页
第五讲-面向对象编程(二)继承封装和多态.ppt_第4页
第五讲-面向对象编程(二)继承封装和多态.ppt_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五讲面向对象编程 二 继承 封装和多态 4 3继承 封装和多态 4 3 1继承4 3 2封装4 3 3多态4 3 4this和base关键字 4 3 1类的继承 继承的意思是一个类可以建立在另一个类的基础上 可以继承另一个类的属性和方法 我们把被继承的类叫做基类 通过继承产生的类叫做派生类 也可以叫做父类和子类 继承的概念来源与现实的生活 比如汽车 轮船 火车飞机等就是继承于交通工具这个类 而汽车类中又可以派生出新的类 比如轿车 面包车等等 引入继承可以让我们重用以前写过的代码 新编写的代码可以在原来的基础上继承而来 在C 中继承的方式就是定义派生类 在C 中 所有的类都是通过直接或间接地继承Object类得到的 1 派生子类 定义派生类的基本形式 class派生类名字 基类名字 派生类的代码 publicclassParent publicParent 定义一个构造函数 publicvoidWriteItem 定义方法 publicclassChild Parent publicChild 派生类的构造函数 publicstaticvoidMain Childa newChild a WriteItem 派生类使用基类的方法 基类的构造函数先执行再执行派生类的构造函数 2 域的继承 添加与隐藏 1 域的继承 子类可以继承父类的所有成员 2 域的添加 在子类定义中加上新的域变量 就可以使得子类具有比父类多的属性 如 classStudent Person stringschool intscore 子类比父类多了两个成员 school score 3 域的隐藏 子类重新定义一个从父类中继承的域变量 classA publicinta classB A newpublicinta 使用new修饰符来隐藏父类的同名成员a 3 方法的继承 添加与覆盖 1 方法的继承 子类可以继承父类的所有方法 2 方法的添加 在子类定义中加上新的方法 以针对子类实现相应的功能 比如可以在Student类中定义分数的判断方法 3 方法的覆盖 子类定义与父类同名的方法 多态之一 1 定义同名但参数列表不同的方法 称为方法的重载 2 定义同名且参数列表也相同的方法 称为新增 这时应该在同名方法前面用new修饰符 3 定义同名且参数列表也相同的方法 并且父类中的方法用abstract virtual进行修饰 子类中的方法用override进行了修饰 称为虚方法的覆盖 方法重载举例 classparent publicintadd intx inty return x y classchild parent publicintadd intx inty intz return x y z publicstaticvoidMain childc1 newchild c1 add 1 2 3 c1 add 4 5 分别使用了自己和父类的方法 方法隐藏举例 classparent publicintadd intx inty return x y classchild parent newpublicintadd intx inty return x y 10 publicstaticvoidMain childc1 newchild c1 add 4 5 使用了自己的方法 虚方法覆盖举例 Classone publicvoidx Console WriteLine one x publicvirtualvoidy Console WriteLine one y Classtwo one newpublicvoidx 隐藏父类中的同名方法 Console WriteLine two x publicoverridevoidy 重写同名方法 Console WriteLine two y Classtest publicstaticvoidMain twom2 newm2 onem1 m2 m1指向m2实例m1 x m2 x m1 y m2 y 结果 one xtwo xtwo ytwo y 4 3 2类的封装 类的封装改变了用户传统的使用数据和代码的方式 它将方法和数据包含在一起构成一个独立的单元 可以通过设定单元内各个成员的的特性来控制对成员的访问 比如将一个字段定义为private 就可以防止外界直接访问这个字段 封装一个类由两种做法 1 为一个私有类定义公共读方法和写方法 2 使用属性 用set和get访问器 publicclassStudent privatestringstudentname publicstringgetstudentname return studentname publicstringsetstudentname stringna studentname na classApp publicstaticvoidMain Students1 newStudent s1 setstudentname zhanghua Console WriteLine s1 getstudentname 不能使用语句s1 studentname zhanghua 4 3 3多态 多态指的是定义具有不同功能但相同名称的方法或属性的多个类的能力 C 中的多态可以由虚方法实现 对于非虚方法 其实现是不变的 无论由基类实例调用还是由派生类实例调用都是相同的 而虚方法的实现可以由派生类取代 取代的过程称为重写 重写可以取代从基类继承的虚方法 但原虚方法的可访问性不能改变 静态方法和非虚方法不能被重写 基类publicvirtualvoidShow 派生类publicoverridevoidShow 虚方法重写举例 定义基类圆形Round 有一个成员半径 编写构造函数和计算面积的虚方法Area 再定义一个派生类球形Sphere 对虚方法Area进行重写 classRound publicdoubler publicRound doubler this r r publicvirtualdoubleArea return 3 14 r r classSphere Round publicSphere doubler base r publicoverridedoubleArea return 3 14 r r r classApp staticvoidMain Spheres newSphere 2 Console WriteLine s Area 1 this关键字 this关键字的作用是引用调用方法的当前实例 它可以从构造函数 实例方法和实例访问器中访问成员 用法一 使用this来访问域和方法voidsayHello Console WriteLine Mynameis name 与以下方法相同 voidsayHello Console WriteLine Mynameis this name 用法二 解决局部变量与域同名问题publicStudent stringname stringnumber this name name this number number 4 3 4this和base关键字 this关键字举例 usingSystem publicclassStudent publicstringname publicstringnumber publicdoublesubsidy 180 publicStudent stringname stringnumber this name name this number number publicvoidShowInfo Console WriteLine 0 n 1 name number Console WriteLine 0 AdvSubsidy Caculate this publicclassAdvSubsidy publicstaticdoubleCaculate studentE return 1 5 E subsidy publicclassAppMain publicstaticvoidMain Students1 newStudent zhanghua 200454240 s1 ShowInfo this的注意事项 this指的是调用的 对象 本身 1 通过this不仅可以引用该类中定义的域和方法 还可以引用该类的父类中定义的域和方法 2 在static静态方法中 不能使用this关键字 2 base关键字 base指的是父类 1 明确指明父类的域和方法 例如 父类Person中有一个域为age 则在子类Student中用age this age base age来访问age是完全一样的 2 当子类的方法隐藏或覆盖了父类的同名方法但又要调用父类的方法时 使用base关键字 3 想使用父类的构造方法 构造方法是不能继承的 但子类可以在构造方法中调用直接父类的构造方法 如Student stringname intage stringschool base name age this school school base 用法2 举例 usingSystem publicclassA publicinta 10 publicvoidm a Console WriteLine a classB A newpublicinta 20 newpublicvoidm a base m Console WriteLine a publicstaticvoidMain Ax newA Console WriteLine x a 10 x m 11By newB Console WriteLine y a 20y m 1121 如此处直接使用base m 则最后的结果为12而不是21 4 4运算符重载 4 4 1运算符重载基本概念4 4 2单目运算符重载4 4 3双目运算符重载 4 4 1多态之二 运算符的重载 运算符可以进行基本数据类型之间的运算 想把自己定义的类型进行类似 之类的运算就要用到运算符重载 对于 运算符完全可以提供对应的方法来完成 比如Decimalx y X y 可以写成decimal Add x y x y 运算符重载的一般形式是publicstatic返回类型operator运算符 参数表 语句 usingSystem Classclass1 publicintx1 x2 publicclass1 x1 1 x2 2 publicstaticintoperator class1c c x1 c x1 10 c x2 c x2 5 PublicvoidShow Console WriteLine 0 1 x1 x2 ClassApp publicstaticvoidMain class1mc newclass1 mc Show mc mc Show 结果 x1 1 x2 2x1 11 x2 7 4 4 2单目运算符重载 usingSystem Classclass1 publicintx1 x2 publicclass1 x1 1 x2 2 public

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论