




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章继承和多态详解演示文稿现在是1页\一共有32页\编辑于星期一优选第七章继承和多态现在是2页\一共有32页\编辑于星期一本讲内容继承与方法重写多态抽象类与抽象方法instanceof运算符与类型转换现在是3页\一共有32页\编辑于星期一本讲目标掌握继承的概念及用法。掌握多态的概念及用法掌握抽象类的使用现在是4页\一共有32页\编辑于星期一为什么使用继承?这两个类图有什么问题?-name:String-health:int-love:int-strain:StringDog+print():void+getName():String+getHealth
():int+getLove():int+getStrain:String+Dog()-name:String-health:int-love:int-sex:StringPenguin+print():void+getName():String+getHealth
():int+getLove():int+getSex():String+Penguin()使用继承优化设计将重复代码抽取到父类中现在是5页\一共有32页\编辑于星期一继承的好处使用继承优化后:子类与父类是is-a关系
减少代码量方便修改代码现在是6页\一共有32页\编辑于星期一如何使用继承使用继承编写父类编写子类,继承父类classPet{
//公共的属性和方法}classDogextendsPet{
//子类特有的属性和方法}classPenguinextendsPet{
}只能继承一个父类继承关键字现在是7页\一共有32页\编辑于星期一继承的实现extends关键字用于继承类。声明一个继承父类的类的通常形式如下:
classsubclass-nameextendssuperclass-name{//类体
}
例:classStudentextendsPerson{…}
注:没有extends,默认父类为Object,是最高层类。只能有一个父类,即单继承现在是8页\一共有32页\编辑于星期一理解继承子类访问父类成员访问父类属性访问父类方法使用super关键字;super.print();super代表父类对象现在是9页\一共有32页\编辑于星期一理解继承子类继承了父类的属性和方法但有些父类成员不能继承:private成员子类与父类不在同包,使用默认访问权限的成员构造方法现在是10页\一共有32页\编辑于星期一继承的特点通过继承可以简化类的定义,实现代码的重用Java只支持单继承,不允许多重继承。可以有多层继承;类B继承类A;类C继承类B;子类继承父类的成员变量和成员方法,但不继承父类的构造方法在子类的构造方法中可用super(参数列表)调用父类的构造方法。如果子类的构造方法中没有显式的调用父类构造方法,也没有使用this关键字调用自己的其他构造方法,那么在产生子类实例对象时JVM自动调用父类无参数的构造方法。现在是11页\一共有32页\编辑于星期一何时使用继承何时使用继承?继承与真实世界类似只要说“猫是哺乳动物”,猫的很多属性、行为就不言自明了藏獒是一种狗继承是代码重用的一种方式将子类都有的属性和行为放到父类中符合is-a关系的设计使用继承现在是12页\一共有32页\编辑于星期一小结阅读代码,说出运行结果classCar{privateintsite=4;//座位数Car(){System.out.println("载客量是"+site+"人);}publicvoidsetSite(intsite){this.site=site;}voidprint(){System.out.print("载客量是"+site+"人");}}classBusextendsCar{Bus(intsite){setSite(site);}}publicstaticvoidmain(String[]args){Busbus=newBus(20);bus.print();}载客量是4人载客量是20人现在是13页\一共有32页\编辑于星期一方法重写子类中有和父类相同签名的方法,会如何?子类重写父类方法现在是14页\一共有32页\编辑于星期一方法重写子类可以定义与父类同名的变量,实现对父类变量的隐藏子类可以定义与父类同名的方法,实现对父类方法的覆盖,即方法重写方法重写的条件:必须具有相同的方法名;必须具有相同的参数列表;重写方法的返回值类型必须和被重写方法的返回值类型相同或者是其子类;重写方法的不能缩小被重写方法的访问权限。现在是15页\一共有32页\编辑于星期一方法重写构造方法能被重写吗?如何在子类中调用父类的构造方法?super();super(参数表);可以被默认添加只能是构造方法的第一条语句不能被继承因此不能重写现在是16页\一共有32页\编辑于星期一方法修饰符方法修饰符staticfinalabstract现在是17页\一共有32页\编辑于星期一static修饰符static修饰符修饰的方法叫静态方法目的:使该方法独立于类的实例,使用类去访问,而不是类实例,所以也叫类方法
规则可以调用其他静态方法必须访问静态数据不能使用
super
或this关键字现在是18页\一共有32页\编辑于星期一final修饰符
final不能修改变量子类不能重写方法类不能被继承现在是19页\一共有32页\编辑于星期一Penguin类不希望再被其他类继承?使用final类方法不希望被重写?使用final方法属性值不希望被修改?使用final方法final用法publicfinalclassPenguinextendsPet{//…}最终版的类publicfinalvoidprint(){//…}最终版的方法publicclassPenguin{finalStringhome="南极";//居住地
publicvoidsetHome(Stringname){this.home=home;//错误,home不可以再次赋值
}}最终版的属性值现在是20页\一共有32页\编辑于星期一abstract修饰符由abstract修饰的方法叫抽象方法;由abstract修饰的类叫抽象类抽象方法必须声明在抽象类中抽象方法语法:abstracttypemethod_name(parameter_list);声明抽象类语法:abstractclass{……}使用:父类中的某些抽象不包含任何逻辑,并需要在子类中重写,子类提供这种抽象方法的实现细节抽象方法没有方法体抽象方法必须在子类中被实现,除非子类是抽象类现在是21页\一共有32页\编辑于星期一
abstract抽象类不能被实例化构造方法
和static
方法不能是抽象的父类的抽象方法往往在子类中实现
abstract修饰符现在是22页\一共有32页\编辑于星期一小结继承成员变量的隐藏与方法的覆盖的区别为:子类隐藏父类的成员变量只是使之不可见,父类的同名成员变量在子类对象中仍然占有自己独立的内存空间;而子类方法对父类同名方法的覆盖将清除父类方法占用的内存,从而使父类方法在子类对象中不存在。方法的覆盖与成员变量的隐藏的意义:将父类行为和状态改为自身的行为和状态,对外仍保持统一的接口和名字,不失继承性。现在是23页\一共有32页\编辑于星期一小结继承猜猜以下程序的运行结果classPerson{ publicPerson(){System.out.println("personconstructor");}}classManextendsPerson{ publicMan(){System.out.println("manconstructor");}}classChineseManextendsMan{ publicChineseMan(){System.out.println("chinesemanconstructor");}}publicclassTest{ publicstaticvoidmain(String[]args){ ChineseMancm=newChineseMan(); }}现在是24页\一共有32页\编辑于星期一多态宠物生病了,需要主人给宠物看病不同宠物看病过程不一样不同宠物恢复后体力值不一样
打针
吃药
吃药
疗养
狗狗
Q仔
现在是25页\一共有32页\编辑于星期一编写主人类编写给狗狗看病的方法编写给Q仔看病的方法为什么使用多态publicclassMaster{publicvoidCure(Dogdog){if(dog.getHealth()<50){dog.setHealth(60);System.out.println("打针、吃药");}}publicvoidCure(Penguinpenguin){if(penguin.getHealth()<50)penguin.setHealth(70);System.out.println("吃药、疗养");}}主人类……Mastermaster=newMaster();master.Cure(dog);master.Cure(penguin);……测试方法现在是26页\一共有32页\编辑于星期一为什么使用多态如果又需要给XXX看病,怎么办?添加XXX类,继承Pet类修改Master类,添加给XXX看病的方法使用多态优化设计频繁修改代码,代码可扩展性、可维护性差现在是27页\一共有32页\编辑于星期一为什么使用多态使用多态优化后的代码……Petpet=newDog();Mastermaster=newMaster();master.Cure(pet);……测试方法publicclassDogextendsPet{publicvoidtoHospital(){this.setHealth(60);System.out.println("打针、吃药");}}publicclassPenguinextendsPet{publicvoidtoHospital(){
this.setHealth(70);System.out.println("吃药、疗养");}}publicclassMaster{publicvoidCure(Petpet){if(pet.getHealth()<50)pet.toHospital();}}主人类
Dog类
Penguin类1234又要给XXX看病时,只需:1.编写XXX类继承Pet类(旧方案也需要)2.创建XX
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初中历史人教八年级上册近代化的探索洋务运动学历案
- 浪潮校招java面试题及答案
- java初级数据库运维面试题及答案
- 学前教育宣传汇报
- 小学生男生教育
- 水泥厂化验室安全培训
- 幼儿园奥运课件
- 2025年中国男士脱毛膏行业市场全景分析及前景机遇研判报告
- 企业征信培训
- 中班幼儿入园常规实施策略
- GB/T 10051.7-2010起重吊钩第7部分:直柄双钩
- 2011病因推断教师版
- 2022年11月四川省遂宁市退役军人服务中心关于公开考试招考1名编外人员考前冲刺卷Ⅰ【3套】附带答案详解
- 专家咨询费(劳务费、数据采集费)支付表
- DB31T 405-2021 集中空调通风系统卫生管理规范
- 民族理论与民族政策最全ppt完整版课件全套教学教程整本书电子教案
- SF∕T 0111-2021 法医临床检验规范
- 国家开放大学计算机应用基础(本) 终结性考试试题及参考答案
- 砍掉成本题库合并
- 交流电动机安装与运行空载记录
- I本往复机用户手册
评论
0/150
提交评论