




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JAVA核心逻辑核心逻辑 第七章第七章:封装、继承、多态封装、继承、多态目录目录l 封装的概念封装的概念l 继承的概念继承的概念l 访问修饰符访问修饰符l 方法的覆盖方法的覆盖(Override)l super关键字关键字l 多态的概念多态的概念l 强制类型转换与强制类型转换与instanceof关键字关键字l 下面代码有何缺陷?下面代码有何缺陷?为什么要使用封装为什么要使用封装Consumer cons = new Consumer();cons.age = -1000; 属性随意访问,不合理的赋值属性随意访问,不合理的赋值 使用封装使用封装 封装的概念封装的概念l 什么是封装什么是封装将类
2、的某些信息隐藏在类内部,不允许外部程序直接访问,而是将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问通过该类提供的方法来实现对隐藏信息的操作和访问l 封装的好处封装的好处隐藏类的实现细节隐藏类的实现细节方便加入控制语句方便加入控制语句方便修改实现方便修改实现只能通过规定方法访问数据只能通过规定方法访问数据l 封装步骤封装步骤使用封装使用封装设为设为private用于属性的读写用于属性的读写 对属性值的对属性值的合法合法性性进行判断进行判断 使用封装使用封装使用封装使用封装输出结果:输出结果:100.0封装练习封装练习l 需求说明需求说明使用
3、封装描述宠物信息,小猫和企鹅使用封装描述宠物信息,小猫和企鹅小猫:昵称、健康值、亲密度、种类和自身信息显示小猫:昵称、健康值、亲密度、种类和自身信息显示企鹅:昵称、健康值、亲密度、性别和自身信息显示企鹅:昵称、健康值、亲密度、性别和自身信息显示为什么使用继承为什么使用继承l 分析代码分析代码- name:String- health:int- love:int- strain:StringDog+ print():void+ getName():String+ getHealth ():int+ getLove():int+ getStrain:String+ Dog()- name:Stri
4、ng- health:int- love:int- sex:StringPenguin+ print():void+ getName():String+ getHealth ():int+ getLove():int+ getSex():String+ Penguin()将重复代码将重复代码抽取到父类中抽取到父类中使用继承优化设计使用继承优化设计为什么使用继承为什么使用继承l 使用继承后使用继承后减少代码量减少代码量 方便修改代码方便修改代码 子类与父类是子类与父类是is-a关系关系继承继承l 继承关键字继承关键字extendsl示例示例编写父类编写父类子类继承子类继承 class Pet /
5、公共的属性和方法公共的属性和方法class Dog extends Pet /子类特有的属性和方法子类特有的属性和方法只能继承一个父类只能继承一个父类 使用继承使用继承l 子类访问父类成员子类访问父类成员访问父类构造方法访问父类构造方法 super (); super (name);访问父类属性访问父类属性 ;访问父类方法访问父类方法super.print(); 使用使用super关键字关键字,super代表父类对象代表父类对象 在子类构造方法中调用且在子类构造方法中调用且必须是第一句必须是第一句小结小结l java中的继承的特点中的继承的特点单继承单继承l java中单继
6、承的好处中单继承的好处代码复用代码复用利于维护利于维护l使用场合使用场合符合符合is-a关系关系需要解决代码重复需要解决代码重复理解继承理解继承l Dog类类 extends Animal类类l对象的创建:对象的创建: new Dog();分配空间分配空间 (父类对象空间,子类对象空间)(父类对象空间,子类对象空间)递归的构造父类对象递归的构造父类对象初始化属性初始化属性调用构造方法调用构造方法Dog call()AnimalsexageJava中的访问修饰符中的访问修饰符l java中的访问修饰符中的访问修饰符方法的覆盖方法的覆盖(Override)l 使用继承后效果使用继承后效果l如何实现
7、如下效果呢?如何实现如下效果呢?调用父类的调用父类的print()方法,方法,不能显示不能显示Dog的的strain信信息和息和Peguin的的sex信息信息 子类重写父类方法子类重写父类方法 方法的覆盖方法的覆盖(Override)l方法重写的规则方法重写的规则方法名相同方法名相同参数列表相同参数列表相同返回值类型相同或者是其子类;返回值类型相同或者是其子类;访问权限不能严于父类访问权限不能严于父类l方法重载与方法重写方法重载与方法重写 方法名方法名参数表参数表返回值返回值访问修饰符访问修饰符方法重写方法重写相同相同相同相同相同或是相同或是其子类其子类不能比父类更不能比父类更严格严格方法重载
8、方法重载相同相同不相同不相同无关无关无关无关继承练习继承练习l 需求说明需求说明优化描述宠物信息的功能优化描述宠物信息的功能 使用继承实现使用继承实现Dog类和类和Penguin类类打印宠物信息打印宠物信息super()思考题思考题super()总结总结l 每一个子类的构造方法在没有显示调用每一个子类的构造方法在没有显示调用super()系统都会系统都会提供一个默认的提供一个默认的super()l super() 书写在第一行书写在第一行l 可以在子类构造方法中显示调用可以在子类构造方法中显示调用super(),完成对特定父类完成对特定父类构造方法的调用构造方法的调用lsuper不能访问父类的
9、不能访问父类的private成员成员抽象类抽象类l 问题:实例化问题:实例化Pet是否的意义是否的意义 ?lJava中使用抽象类,限制实例化中使用抽象类,限制实例化labstract也可用于方法也可用于方法抽象方法抽象方法抽象方法没有方法体抽象方法没有方法体抽象方法必须在抽象类里抽象方法必须在抽象类里抽象方法必须在子类中被实现,除非子类是抽象类抽象方法必须在子类中被实现,除非子类是抽象类Pet pet = new Pet (贝贝贝贝,20,40);pet.print();public abstract class Pet public abstract void print();抽象类练习抽象
10、类练习l需求说明:需求说明:修改修改Pet类为抽象类类为抽象类修改修改Pet类的类的print()方法为抽象方法方法为抽象方法输出输出Dog信息信息抽象类的特点抽象类的特点l 抽象类可以用于声明,但不允许创建对象抽象类可以用于声明,但不允许创建对象l抽象类可以被子类继承,从而创建子类对象抽象类可以被子类继承,从而创建子类对象抽象方法的特点抽象方法的特点l 拥有抽象方法的类必须是抽象类拥有抽象方法的类必须是抽象类抽象方法的特点抽象方法的特点l 抽象方法由子类实现抽象方法由子类实现非抽象类继承抽象非抽象类继承抽象类,必须实现父类类,必须实现父类的所有抽象方法的所有抽象方法抽象的作用抽象的作用l 抽
11、取共性抽取共性抽象的作用抽象的作用l 不同实现不同实现抽象的作用抽象的作用l 抽象类是更高层次的抽象抽象类是更高层次的抽象综合练习综合练习轿车轿车客车(金杯、金龙)客车(金杯、金龙)车型车型别克商务别克商务舱舱GL8宝马宝马550i别克林别克林荫大道荫大道16座座日租费日租费(元元/天天)6005003008001500l 需求说明需求说明编写程序实现计算租赁价编写程序实现计算租赁价 某汽车租赁公司出租多种车辆,车型及租金情况如下:某汽车租赁公司出租多种车辆,车型及租金情况如下:综合练习综合练习l 提示提示类:类: Vehicle 机动车机动车(父类父类) Car 轿车轿车 Bus 客车客车属
12、性:属性:Vehicle- no(车牌号车牌号) Car- type(型号型号) Bus- seatCount(座位数座位数)方法:方法:Vehicle- calculate(int days) :double 为什么使用多态为什么使用多态l 问题思考问题思考宠物饿了,需要主人给宠物喂食宠物饿了,需要主人给宠物喂食不同宠物吃的食物不一样不同宠物吃的食物不一样不同宠物恢复后体力值不一样不同宠物恢复后体力值不一样 吃狗粮吃狗粮 吃吃鱼鱼 小猫小猫 企鹅企鹅 健康值增加健康值增加3 3 小猫小猫 健康值增加健康值增加5 企鹅企鹅 为什么使用多态为什么使用多态l 分析分析小猫类小猫类增加小猫吃食的方法
13、增加小猫吃食的方法企鹅类企鹅类增加企鹅吃食的方法增加企鹅吃食的方法创建主人类创建主人类编写给小猫喂食的方法编写给小猫喂食的方法编写给企鹅喂食的方法编写给企鹅喂食的方法示例示例1:未使用多态实现给宠物喂食:未使用多态实现给宠物喂食为什么使用多态为什么使用多态l 问题问题如果再领养如果再领养XXX宠物,就需要给宠物,就需要给XXX喂食,怎么办?喂食,怎么办?添加添加XXX类,继承类,继承Pet类,实现吃食方法类,实现吃食方法修改修改Master类,添加给类,添加给XXX喂食的方法喂食的方法为什么使用多态为什么使用多态public class Master public void feed( Dog
14、 dog ) dog.eat(); public void feed( Penguin pgn ) pgn.eat(); public void feed( XXX xxx ) xxx.eat(); 主人类主人类 Master master = new Master();master.feed(dog);master.feed(penguin);master.feed(xxx); 测试方法测试方法 频繁修改代码,代码可扩展性、可维护性差,频繁修改代码,代码可扩展性、可维护性差,如何优化?如何优化? 参数都是参数都是Pet类的子类类的子类可否使用一个可否使用一个feed(Pet pet)实现对所
15、有宠物的喂食?实现对所有宠物的喂食? 使用多态优化设计使用多态优化设计 多态的概念多态的概念l 生活中的多态生活中的多态不同类型的打印机打印效果不同不同类型的打印机打印效果不同程序中的多态程序中的多态多态:同一个引用类型,使用不同的实例而执行不同操作多态:同一个引用类型,使用不同的实例而执行不同操作 父类引用,子类对象父类引用,子类对象 同一种事物,由于条件不同,产生的结果也不同同一种事物,由于条件不同,产生的结果也不同黑白打印机 彩色打印机 打印如何实现多态如何实现多态l使用多态实现思路使用多态实现思路编写父类编写父类编写子类,子类重写父类方法编写子类,子类重写父类方法运行时,使用父类的类型
16、,子类的对象运行时,使用父类的类型,子类的对象向上转型向上转型l实现多态的两种形式实现多态的两种形式使用父类作为方法形参实现多态使用父类作为方法形参实现多态使用父类作为方法返回值实现多态使用父类作为方法返回值实现多态 实现多态的两个要素实现多态的两个要素Pet pet = new Dog(); 自动类型转换自动类型转换使用多态使用多态l使用多态优化主人给宠物喂食使用多态优化主人给宠物喂食 Pet pet = new Dog();Master master = new Master();master.feed( pet ); public class Master public void fee
17、d( Pet pet ) pet.eat(); 主人类主人类 测试方法测试方法 同一种操作方式,同一种操作方式,不同的操作对象不同的操作对象 使用父类作为使用父类作为方法形参方法形参 示例示例2:使用多态实现给宠物喂食:使用多态实现给宠物喂食多态练习多态练习1l需求说明需求说明使用多态实现喂养宠物功能使用多态实现喂养宠物功能增加宠物猫并喂食,其健康值增加增加宠物猫并喂食,其健康值增加4多态练习多态练习2l需求说明需求说明使用多态实现领养宠物使用多态实现领养宠物使用父类作为方法返回值使用父类作为方法返回值l实现思路实现思路在在Master类添加领养方法类添加领养方法getPet(String t
18、ypeId )创建测试类,根据主人选择宠物类型编号来领养宠物创建测试类,根据主人选择宠物类型编号来领养宠物public class Master public Pet getPet(String typeId ) 使用父类作为使用父类作为返回值类型返回值类型 主人类主人类 多态的特点多态的特点l Dog d = new Dog();Pet a = new Dog();l 多态的特点多态的特点 对象类型不可变,引用类型可变对象类型不可变,引用类型可变 只能调用其引用类型中定义的方法只能调用其引用类型中定义的方法 运行时会运行子类覆盖的方法运行时会运行子类覆盖的方法l多态的作用多态的作用提高代码的
19、通用性提高代码的通用性父类到子类的转换父类到子类的转换l 问题问题实现主人与宠物玩耍功能实现主人与宠物玩耍功能和小猫玩接飞盘游戏,小猫的健康值减少和小猫玩接飞盘游戏,小猫的健康值减少10,与主人亲密度增加,与主人亲密度增加5和企鹅玩游泳游戏,企鹅的健康值减少和企鹅玩游泳游戏,企鹅的健康值减少10,与主人亲密度增加,与主人亲密度增加5l分析分析给给Dog添加接飞盘方法添加接飞盘方法catchingFlyDisc( )给给Penguin添加游泳方法添加游泳方法swimming( )给主人添加给主人添加play(Pet pet)方法方法父类到子类的转换父类到子类的转换l代码实现代码实现public
20、class Master public void play(Pet pet) pet.catchingFlyDisc();public class Penguin extends Pet public void swimming () public class Dog extends Pet public void catchingFlyDisc() 小猫类小猫类 企鹅类企鹅类 主人类主人类 Pet pet = new Dog();Master master = new Master();master.pet(pet); 测试类测试类 父类到子类的转换父类到子类的转换l父类到子类的转换父类到子
21、类的转换向下转型(强制类型转换)向下转型(强制类型转换)linstanceof运算符运算符语法语法Pet pet = new Dog(欧欧欧欧, 雪娜瑞雪娜瑞);Dog dog = (Dog) pet; Penguin png = (Penguin) pet;对象对象 instanceof 类或接口类或接口报错,必须转换为报错,必须转换为父类指向的真实子父类指向的真实子类类型类类型父类到子类的转换父类到子类的转换l优化主人与宠物玩耍优化主人与宠物玩耍public class Master public void play(Pet pet) if (pet instanceof Dog) /如果传入的是小猫如果传入的是小猫 Dog dog = (Dog) pet; dog.catchingFlyDisc();else if (pet instanceof Penguin) /如果传入的是企鹅如果传入的是企鹅 Penguin pgn = (Penguin) pet; pgn.swimming(); 主人类主人类 示例示例4:使用多态实现主人与宠物玩耍:使
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025商业贷款合同范本示例
- 与车商签合同范例
- 供货合同标准文本(二)
- 中国钢结构施工合同范例
- 光伏用户合同样本
- 几人共同购房合同样本
- 免烧砖厂合同样本
- 农村买房协议合同标准文本
- 个人职业发展规划计划
- 冠名商赞助合同标准文本
- 2024年中国移动招聘笔试真题
- 2025年安阳职业技术学院单招职业技能测试题库及答案一套
- 小学课本剧一年级《咕咚来了》-剧本
- 部编 2024版历史七年级下册第三单元第16课《明朝的对外关系》说课稿
- 酒店与旅游地产投资
- 消防员的敬业与荣誉
- 2025年人教版英语五年级下册教学进度安排表
- 职工基本医疗保险参保登记表
- 《海南航空简介》课件
- 课题申报书:数字赋能突发公共卫生事件治理的机理、路径及对策研究
- 外研版(2025新版)七年级下册英语Unit 4 学情调研测试卷(含答案)
评论
0/150
提交评论