下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JAVA核心逻辑 第七章:封装、继承、多态,目录,封装的概念 继承的概念 访问修饰符 方法的覆盖(Override) super关键字 多态的概念 强制类型转换与instanceof关键字,下面代码有何缺陷?,为什么要使用封装,Consumer cons = new Consumer(); cons.age = -1000;,属性随意访问,不合理的赋值,使用封装,封装的概念,什么是封装 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 封装的好处,隐藏类的实现细节,方便加入控制语句,方便修改实现,只能通过规定方法访问数据,封装步骤,使用封装
2、,设为private,用于属性的读写,对属性值的合法性进行判断,使用封装,使用封装,输出结果:100.0,封装练习,需求说明 使用封装描述宠物信息,小猫和企鹅 小猫:昵称、健康值、亲密度、种类和自身信息显示 企鹅:昵称、健康值、亲密度、性别和自身信息显示,为什么使用继承,分析代码,将重复代码 抽取到父类中,使用继承优化设计,为什么使用继承,使用继承后,减少代码量,方便修改代码,子类与父类是is-a关系,继承,继承关键字 extends 示例 编写父类 子类继承,class Pet /公共的属性和方法 ,class Dog extends Pet /子类特有的属性和方法 ,只能继承一个父类,使用
3、继承,子类访问父类成员 访问父类构造方法 super (); super (name); 访问父类属性 ; 访问父类方法 super.print();,使用super关键字, super代表父类对象,在子类构造方法中调用且必须是第一句,小结,java中的继承的特点 单继承 java中单继承的好处 代码复用 利于维护 使用场合 符合is-a关系 需要解决代码重复,理解继承,Dog类 extends Animal类 对象的创建: new Dog(); 分配空间 (父类对象空间,子类对象空间) 递归的构造父类对象 初始化属性 调用构造方法,Java中的访问修饰符,java中的访问
4、修饰符,方法的覆盖(Override),使用继承后效果 如何实现如下效果呢?,调用父类的print()方法,不能显示Dog的strain信息和Peguin的sex信息,子类重写父类方法,方法的覆盖(Override),方法重写的规则 方法名相同 参数列表相同 返回值类型相同或者是其子类; 访问权限不能严于父类 方法重载与方法重写,继承练习,需求说明 优化描述宠物信息的功能 使用继承实现Dog类和Penguin类 打印宠物信息,super()思考题,super()总结,每一个子类的构造方法在没有显示调用super()系统都会提供一个默认的super() super() 书写在第一行 可以在子类构
5、造方法中显示调用super(),完成对特定父类构造方法的调用 super不能访问父类的private成员,抽象类,问题:实例化Pet是否的意义 ? Java中使用抽象类,限制实例化 abstract也可用于方法抽象方法 抽象方法没有方法体 抽象方法必须在抽象类里 抽象方法必须在子类中被实现,除非子类是抽象类,Pet pet = new Pet (贝贝,20,40); pet.print();,public abstract class Pet ,public abstract void print();,抽象类练习,需求说明: 修改Pet类为抽象类 修改Pet类的print()方法为抽象方法
6、输出Dog信息,抽象类的特点,抽象类可以用于声明,但不允许创建对象 抽象类可以被子类继承,从而创建子类对象,抽象方法的特点,拥有抽象方法的类必须是抽象类,抽象方法的特点,抽象方法由子类实现,非抽象类继承抽象类,必须实现父类的所有抽象方法,抽象的作用,抽取共性,抽象的作用,不同实现,抽象的作用,抽象类是更高层次的抽象,综合练习,需求说明 编写程序实现计算租赁价 某汽车租赁公司出租多种车辆,车型及租金情况如下:,综合练习,提示 类: Vehicle 机动车(父类) Car 轿车 Bus 客车 属性:Vehicle- no(车牌号) Car- type(型号) Bus- seatCount(座位数)
7、 方法:Vehicle- calculate(int days) :double,为什么使用多态,问题思考 宠物饿了,需要主人给宠物喂食 不同宠物吃的食物不一样 不同宠物恢复后体力值不一样,吃狗粮,吃鱼,小猫,企鹅,健康值增加3,小猫,健康值增加5,企鹅,为什么使用多态,分析 小猫类 增加小猫吃食的方法 企鹅类 增加企鹅吃食的方法 创建主人类 编写给小猫喂食的方法 编写给企鹅喂食的方法,为什么使用多态,问题 如果再领养XXX宠物,就需要给XXX喂食,怎么办? 添加XXX类,继承Pet类,实现吃食方法 修改Master类,添加给XXX喂食的方法,为什么使用多态,public class Mast
8、er public void feed( Dog 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)实现对所有宠物的喂食?,使用多态优化设
9、计,多态的概念,生活中的多态 不同类型的打印机打印效果不同 程序中的多态,多态:同一个引用类型,使用不同的实例而执行不同操作,父类引用,子类对象,同一种事物,由于条件不同,产生的结果也不同,黑白打印机,彩色打印机,打印,如何实现多态,使用多态实现思路 编写父类 编写子类,子类重写父类方法 运行时,使用父类的类型,子类的对象 向上转型 实现多态的两种形式 使用父类作为方法形参实现多态 使用父类作为方法返回值实现多态,实现多态的两个要素,Pet pet = new Dog();,自动类型转换,使用多态,使用多态优化主人给宠物喂食, Pet pet = new Dog(); Master maste
10、r = new Master(); master.feed( pet ); ,public class Master public void feed( Pet pet ) pet.eat(); ,主人类,测试方法,同一种操作方式, 不同的操作对象,使用父类作为 方法形参,多态练习1,需求说明 使用多态实现喂养宠物功能 增加宠物猫并喂食,其健康值增加4,多态练习2,需求说明 使用多态实现领养宠物 使用父类作为方法返回值 实现思路 在Master类添加领养方法getPet(String typeId) 创建测试类,根据主人选择宠物类型编号来领养宠物,public class Master pub
11、lic Pet getPet(String typeId) ,使用父类作为 返回值类型,主人类,多态的特点,Dog d = new Dog(); Pet a = new Dog(); 多态的特点 对象类型不可变,引用类型可变 只能调用其引用类型中定义的方法 运行时会运行子类覆盖的方法 多态的作用 提高代码的通用性,父类到子类的转换,问题 实现主人与宠物玩耍功能 和小猫玩接飞盘游戏,小猫的健康值减少10,与主人亲密度增加5 和企鹅玩游泳游戏,企鹅的健康值减少10,与主人亲密度增加5 分析 给Dog添加接飞盘方法catchingFlyDisc() 给Penguin添加游泳方法swimming()
12、给主人添加play(Pet pet)方法,父类到子类的转换,代码实现,public 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(pe
13、t); ,测试类,父类到子类的转换,父类到子类的转换 向下转型(强制类型转换) instanceof运算符 语法,Pet pet = new Dog(欧欧, 雪娜瑞); Dog dog = (Dog) pet; Penguin png = (Penguin) pet;,对象 instanceof 类或接口,报错,必须转换为父类指向的真实子类类型,父类到子类的转换,优化主人与宠物玩耍,public class Master public void play(Pet pet) if (pet instanceof Dog) /如果传入的是小猫 Dog dog = (Dog) pet; dog.ca
14、tchingFlyDisc(); else if (pet instanceof Penguin) /如果传入的是企鹅 Penguin pgn = (Penguin) pet; pgn.swimming(); ,主人类,多态练习3,需求说明 主人根据宠物编号领养宠物 主人和小猫玩接飞盘游戏,小猫健康值减少10,与主人亲密度增加5 主人和企鹅玩游泳游戏,企鹅健康值减少10,与主人亲密度增加5,综合练习1,需求说明 在前面汽车租赁系统的基础上,实现计算多种车辆总租金的功能 现在有客户租用 2辆宝马 1辆别克商务舱 1辆金龙(34)座 租5天共多少租金? 实现思路 创建车的对象,放在数组中 循环调用calcRent()方法,计算总租金,综合练习2,需求说明 新购置了卡
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能制造车间中控室设计方案
- 混凝土浇筑管控实施细则
- 开源大模型在个性化服务中的应用
- 盘扣式悬挑脚手架施工技术方案
- 某家具厂技术革新规范
- 工程竣工审计整改报告
- 室内环氧自流平地坪施工方案
- 建筑防水项目施工流程设计
- 平板灯安装施工工艺流程
- 智能银行系统架构演进
- 滴滴租车的电子合同范本
- 贵州省2019-2024年中考满分作文103篇
- 内热针治疗技术临床应用规范
- GB/T 1232.2-2025未硫化橡胶用圆盘剪切黏度计进行测定第2部分:初期硫化特性的测定
- JJG633-2024气体容积式流量计检定规程
- 骨人体解剖生理学讲解
- 高中常用成语积累800个
- 企业绿色发展管理制度
- 光伏能源管理合同三方协议书模板(2篇)
- 2024年镇江卫生系统考试真题
- 中国电信新一代智算数据中心基础设施技术方案白皮书
评论
0/150
提交评论