Java面向对象编程-继承与多态.ppt

上传人:max****ui 文档编号:6365670 上传时间:2020-02-24 格式:PPT 页数:20 大小:2.74MB
返回 下载 相关 举报
Java面向对象编程-继承与多态.ppt_第1页
第1页 / 共20页
Java面向对象编程-继承与多态.ppt_第2页
第2页 / 共20页
Java面向对象编程-继承与多态.ppt_第3页
第3页 / 共20页
点击查看更多>>
资源描述
准备上课了 Java面向对象高级编程 讲师 李志成 继承与多态 目录 类 对象与引用 什么是类 Class 类是具有相同特性和行为的对象集合 是一种抽象 它把一类物体的特征抽象出来 通过适当的数据类型表示 什么是对象 Object 与类相对而言 类是抽象 对象就是具体 例如 人就是一个抽象类 而你 我 他就是一个 人 的对象 什么是引用 reference 对象的名字 用来操作对象 同一对象可以有多个应用吗 为什么需要类 Class n 班级 上课 等级阶级 种类Object n 物体 客体对象 目的目标 目录 面向对象三大特性 封装 类就是封装 封装了属性与方法 它是一种思想 其核心就是 暴露出必要的内容给外部用 而对于内部细节 使用者不用去关心 立即进入面向对象的继承与多态世界 一切从汽车开始 publicclassCar publicintspeed in变量 表示汽车沫磨publicStringname 表示汽车名字publicStringcolor 表示汽车颜色publicvoidspeedUp intp speed if p speed 0 speed p speed publicvoidslowDown intp speed if p speed 0 inttempSpeed speed p speed if tempSpeed 0 speed tempSpeed 系统升级 需要支持公交汽车 业务点 1 包含普通汽车所有属性与行为 2 增加 最大核载人数 当前旅客总数 属性 3 增加 上客 下客 行为 1 增加一个新类2 修改原来的类 选用此方式 解决 修改原来的Car类 publicclassCar 省略publicbooleanisBus 下面是专门为公共汽车增加的三个属性publicintmax Passenger 35 publicintcurrent Passenger 0 专门为公共汽车增加的方法 完成旅客上车的功能publicbooleangetOnBus intp amout if isBus 省略 returnfalse 专门为公共汽车增加的方法 完成旅客下车的功能publicbooleangetDownBus intp amout if isBus 省略 returnfalse 系统升级 需要支持跑车 业务点 1 包含普通汽车所有属性与行为 2 增加 氮气含量 属性 3 增加 使用氮气加速 行为 1 增加一个新类2 修改原来的类 解决 一类车一个类 一类车一个类 问题提出 1 一个类表示所有的汽车类型 需要穷举所有汽车的属性与方法 2 一个类表示一个汽车类型 当需要修改的时候需要修改所有的类 继承 使用继承 问题引刃而解 publicclassCarBase publicintspeed publicStringname publicStringcolor publicintmaxSpeed 0 inttempSpeed 0 if p speed 0 tempSpeed speed p speed if tempSpeed0 inttempSpeed speed p speed if tempSpeed 0 speed tempSpeed publicclassBusextendsCarBasepublicintmax Passenger 35 只需包含Bus特有的属性publicintcurrent Passenger 0 只需包含Bus特有的方法publicbooleangetOnBus intp amout if isBus 省略 returnfalse publicclassSportsCarextendsCarBasepublicintnAmount 90 保存氮气的剩余量 使用氮气来让汽车加速的方法publicvoidspeedUpUsingN intp amout 省略 增加氮气publicvoidaddN intp amout 省略 子类继承了父类的属性和方法 继承 继承的语法格式 子类类名 extends 父类类名Java在创建一个子类的对象的同时 也创造了其父类的一个对象子类继承了父类的属性与方法 但唯一没有直接继承的是父类的构造方法Java中的单继承万类之组 java lang Object类所有类都继承自Object 伪装与反伪装 publicclassAutoConversion publicstaticvoidmain String args SportsCarsportsCar newSportsCar 1 创建了一个SportsCar类的对象CarBasecarBase sportsCar 2 使用强制类型转换carBase speedUp 77 3 使用carBase调用speedUp方法System out println carBase speed的值为 carBase speed 4 输出speed属性的值System out println sportsCar speed的值为 sportsCar speed sportsCar speedUpUsingN 77 5 使用sportsCar调用speedUpUsingN方法System out println carBase speed的值为 carBase speed 4 输出speed属性的值System out println sportsCar speed的值为 sportsCar speed 伪装与反伪装 publicclassForceConvertion publicstaticvoidmain String args SportsCarSportsCar newSportsCar 1 CarBasebase SportsCar 2 System out println 尝试将base引用强制类型转换为SportsCar类的引用 SportsCarconverted SportsCar base 3 System out println 转换成功 System out println 使用converted调用addN方法 converted addN 45 4 System out println converted nAmount的值为 converted nAmount AutoConversionasdf null System out println 使用converted给Object类的引用objCar赋值 ObjectobjCar converted 5 System out println 将Object类引用强制类型转换为CarBase类引用 CarBasebase2 CarBase objCar 6 System out println 将Object类引用强制类型转换为SportsCar类引用 SportsCarsports2 SportsCar objCar 7 遵守语法正确转换 一个子类的引用可以用来给父类引用赋值 而无需强制转换 引用类型决定可以调用对象的哪个方法 访问对象哪些属性子类引用 子类 父类引用 继承后的覆盖 Override 系统升级 1 为了乘客的安全 公共汽车需要在减速的时候保证一次减速的值不能超过某个限定值 以内 因为如果速度降得太快 站着的乘客可能因为惯性而跌倒 2 对于跑车的加速方法 可以设定加速的时候就使用指定数量的氮气 以缩短加速所需时间 当方法不再通用 publicclassSportsCarextendsCarBase 省略publicvoidspeedUp intp speed 1 SportsCar类特有的speedUp方法 省略 省略 覆盖是如何执行的 必须找到符合方法签名的方法 这个和方法名 方法形参和方法实参之间的类型匹配等都有关系 这个详细的过程在学习方法的时候已经讲述过 这里不再赘述 Java平台会首先根据在对象的实际所属的类中寻找符合方法签名的方法 如果找不到 则去它的父类中寻找符合方法签名的方法 如果再找不到 则去它父类的父类中寻找符合方法签名的方法 一直到找到为止 找到后 就执行找到的方法 形参 实参 多态 Overload Override 什么是Overload 类中的两个或者多个方法 如果它们有相关的方法名 但是却又不同的方法签名 那么这几个方法就是重载 为什么使用Overload 让类变得更灵活 publicclassUseCar publicCarBasecar publicvoidsetCar CarBasecar System out println setCar CarBase 方法被调用了 this car car publicvoidsetCar ElectronicBusbus System out println setCar ElectronicBus 方法被调用了 this car bus 重载方法的调用 publicclassUseOverLoad publicstaticvoidmain String args UseCaruseCar newUseCar CarBasebase newCarBase SportsCarsports newSportsCar Busbus newBus ElectronicBuseBus newElectronicBus useCar setCar base useCar setCar sports useCar setCar bus useCar setCar eBus publicclassUseOverLoadII publicstaticvoidmain String args UseCaruseCar newUseCar CarBasebase newCarBase useCar setCar base base newSportsCar useCar setCar base base newBus useCar setCar base base newElectronicBus useCar setCar base 当继承被引入到重载的参数中时 决定函数重载的哪个方法被调用的是实参 这里的实参指的是引用的类型 而不是引用指向对象的类型 Class类与instanceof运算符 Class是不是一个关键字java lang Classinstanceof对象的引用instanceof类名 面向对象三大特性 类就是封装 封装了属性与方法 它是一种思想 其核心就是 暴露出必要的内容给外部用 而对于内部细节 使用者不用去关心 提供了一种可以让我们以一种 与现实中的逻辑相近的方式 构建自己的类和代码 伴随继承而来 包括重载与覆盖 让 具体执行哪个方法 的问题上给予编程者足够大的灵活性
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!