已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章类的重用 5 1类的继承 继承性是面向对象程序设计语言的最主要的特点 是其他语言 如面向过程语言 所没有的 类之间的继承关系是现实世界中遗传关系的直接模拟 它表示类之间的内在联系以及对属性和操作的共享 即子类可以沿用父类 被继承类 的某些特征 当然 子类也可以具有自己独立的属性和操作 5 1 1继承的概念 例如 飞行器 汽车和轮船可归于交通工具类 飞行器类可以继承交通工具类某些属性和操作 马继承了哺乳动物的特征 马是哺乳动物 类B继承自类A BisaA 继承是软件复用的一种形式 新类由已存在的类生成 保留原有类的属性和方法 并且根据新类的要求添加新的属性和方法 此处已存在的类称为父类 基类 超类 新类称为子类 如果子类只从一个父类继承 则称为单继承 如果子类从一个以上父类继承 则称为多继承 注意Java不支持多重继承 但它支持 接口 概念 通过接口使Java获得了多重继承的许多优点 摒弃了相应的缺点 父类名跟在extends关键字后面 用来说明当前类是哪个已经存在类的子类 存在继承关系 publicclassDictionaryextendsBook 5 1 2类继承关系的定义 子类从父类继承有两个主要的方面 1 属性的继承 例如 Book类中定义了pages Dictionary类中可以直接使用 2 方法的继承 一个父类定义了若干操作 如Book中定义的setPages和getPages在子类Dictionary中被继承 可以在子类直接使用 publicclassBook protectedintpages 1500 publicvoidsetPages intnumPages pages numPages publicintgetPages returnpages publicclassDictionaryextendsBook privateintdefinitions 52500 publicdoublecomputeRatio returndefinitions pages publicvoidsetDefinitions intnumDefinitions definitions numDefinitions publicintgetDefinitions returndefinitions 5 1 3属性继承与隐藏 1 子类不能访问父类的private成员 但子类可以访问其父类的public成员 2 子类恒可访问其父类的protected成员 而不管该父类与子类是否在同一个包中 3 被继承的父类成员没有在子类声明中列出 但是这些成员确实存在于子类中 包括private成员 4 父类的构造方法不能被子类继承 5 1 4super引用super引用是指向一个类的父类的引用 一般用super访问父类的成员 父类构造方法在执行子类构造方法时 首先调用其父类的构造方法 可以在子类构造方法的第一个语句用super引用调用父类的构造方法super 如果没有明确写出 则系统会自动调用super 5 1 5方法的继承与覆盖 子类将从父类中继承过来了除构造方法外的所有方法 父类中的private方法虽然不能在子类中直接调用 但可以通过super引用调用 一般 父类的属性最好通过父类的方法访问 以便保证各个类的自治性 2 方法覆盖指在子类中定义了与父类具有相同方法头的方法 而方法体有不同的实现 即对父类的方法体进行了重写 从而覆盖父类的方法 子类通过覆盖父类的方法 使程序保持了同样的接口 但以适合子类的方式工作 1 方法继承 关于覆盖应注意的事项 1 使用super调用父类被覆盖的方法 2 方法覆盖中 子类在重新定义父类已有的方法时 应保持与父类完全相同的方法头声明 即与父类完全相同的方法名 返回值和参数列表 3 子类可以添加域 也可以添加方法或者覆盖父类中的方法 然而 继承不能去除父类中的任何字段和域 3 方法重载 重载的定义 可以用相同的方法名但不同的参数表来定义方法 参数表中参数的数量 类型或次序有差异 这称为方法重载 重载 overloading 当多个方法具有相同的名字而含有不同的参数时 便发生重载 编译器必须挑选处调用哪个方法 它通过将在不同方法头部中的参数类型和在特定的方法调用中使用值的类型进行比较 从而挑选出正确的方法 影子变量 若子类定义了一个与父类的某个变量同名的变量 则该变量称为影子变量 在子类中 如果直接使用影子变量 则使用的是子类中定义的变量 但可以使用super来引用父类的影子变量 影子变量的使用可能带来问题 且使程序代码难以阅读和分析 应该避免 5 1 6类之间的层次结构 一个类可以且只能有一个父类 但可以导出一个或多个子类 一个类导出子类的数量没有限制 若两个或多个类具有一个共同的父类 则称它们为同族类 同族类不具备继承性 子类继承其父类的成员 还继承其父类的父类的成员 即继承具有传递性 由于存在多层继承关系 因此存在一个树形层次结构 由此将抽象概念分层化 5 2Object类 在java lang包中定义 java中的所有类都直接或间接继承该类 Object类的所有public方法被其他类继承 toString方法返回类的描述字符串 一般需要在各类中覆盖定义 5 4 1Object类的equals方法 publicbooleanequals Objectobj 指示其他某个对象是否与此对象 相等 equals方法在非空对象引用上实现相等关系equals方法默认实现 对于任何非空引用值x和y 当且仅当x和y引用同一个对象时 此方法才返回true x y具有值true equals方法在非空对象引用上实现相等关系 自反性 对于任何非空引用值x x equals x 都应返回true对称性 对于任何非空引用值x和y 当且仅当y equals x 返回true时 x equals y 才应返回true 传递性 对于任何非空引用值x y和z 如果x equals y 返回true 并且y equals z 返回true 那么x equals z 应返回true 一致性 对于任何非空引用值x和y 多次调用x equals y 始终返回true或始终返回false 前提是对象上equals比较中所用的信息没有被修改 对于任何非空引用值x x equals null 都应返回false 如果一个对象需要调用equals方法 应该在类中覆盖equals方法 如果覆盖了equals方法 那么具体的比较就按照重写的实现进行比较了 同时 通常还要重写hashCode方法 覆盖equals方法的一般步骤如下 1 用 检查是否参数就是这个对象的引用 2 判断要比较的对象是否为null 如果是null 返回false 3 用instanceof判断参数的类型是否正确 4 把参数转换成合适的类型 5 比较对象属性值是不是匹配 classA publicintage 0 publicbooleanequals Objectobj 第一步先判断是否同一个实例if this obj returntrue 第二步判断要比较的对象是否为nullif obj null returnfalse 第三步判断是否同一个类型if objinstanceofA 第四步类型相同 先转换成为同一个类型Aa A obj 第五步然后进行对象属性值的比较if this age a age returntrue else returnfalse else 类型不同 直接返回falsereturnfalse equals方法与 运算符的关 equals 方法只能比较引用类型 可以比较引用类型及基本类型 用 进行比较时 两边的数据类型必须一致 可自动转换的数据类型除外 否则编译出错 用equals方法比较的两个数据只要都是引用类型即可 在引用类型的比较上 若未重写equals方法 默认的比较方式基本上等同于 都是比较内存地址 若重写equals方法 则执行该方法代码比较其内容 publicclassTest publicstaticvoidmain String args Testt newTest Aa1 newA a1 age 3 Aa2 newA a2 age 3 System out println a1 a2test a1 a2 System out println a1equalsa2test a1 equals a2 5 3抽象类 抽象类代表类层次结构中的类属概念 在类头加abstract关键字定义抽象类 任何含有抽象方法的类都必须声明为抽象类 抽象类中可包含非抽象方法 甚至可以不包含抽象方法 抽象类的子类如果未覆盖抽象方法仍为抽象类 抽象类不能被实例化 abstract修饰符不能与final和static修饰符同时修饰同一个类或方法 接口的层次结构 接口具有与类一样的继承机制 一个接口也可以导出子接口 从而与类一样形成层次结构 子接口继承了父接口的全部常量和抽象方法 实现一个接口的类 必须实现包括从父接口继承来的所有抽象方法 不能从类导出接口 也不能从接口导出类 类可以实现一个或多个接口 在Java语言中 接口 Interface 是对符合接口需求的类的一套规范 接口与包相似 也是用来组织应用中的各类并调节它们的相互关系的一种结构 更准确地说 接口是用来实现类间多重继承功能的结构 8 4可见性 图程序中的访问控制区域 8 5继承的设计 每一种导出关系那是一个is a关系 子类是一个更为具体的父类体现 设计类层次结构的目的是进行复用 或者考虑日后可能存在的复用 类和对象都存在于一定的问题域中 尽量找出它们的共性 为方便维护起见 应把这些共性放置在类层次结构中适当的位置上 适当地进行方法覆盖以满足子类的功能需要 根据需要为子类添加新的变量 但不要隐蔽 重新定义 任何被继承的变量 允许每个类管理自己的数据 使用super引用调用父类的构造方法并适当地调用被覆盖的方法 利用接口创建用以充当多种角色的类 模拟多重维承 设计满足应用程序需求的类层次结构 留意将来存在的复用关系 即使当前不会用到 也应在子类中合理覆盖某些常用的方法 如toStrin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 3048.13-2025电线电缆电性能试验方法第13部分:冲击电压试验
- 2026年中国家庭输液疗法行业市场前景预测及投资价值评估分析报告
- 2026年中国水力活塞泵行业市场前景预测及投资价值评估分析报告
- 2026年中国螺旋不堵式泵行业市场占有率及投资前景预测分析报告
- 2025年下半年江西九江市事业单位“才汇九江”高层次人才招聘276人考试笔试备考试题及答案解析
- 2025四川内江隆昌市响石镇中心学校见习岗位1人需求考试笔试参考题库附答案解析
- 2025重庆市急救医疗中心招聘10人笔试考试备考题库及答案解析
- 湖北省危险化学品禁止、限(控)制、淘汰和鼓励政策目录清单(2025年本)
- 康复医学科脊柱受伤康复指导
- 员工保密协议范本
- 北京法源寺话剧剧本
- 红树林科普讲座课件
- 某洁净室项目招标文件
- 标书投标年某某医院食堂承包投标书
- GB/T 4134-2003金锭
- 中国近代史纲要-为新中国而奋斗
- DB32∕T 4117-2021 保温装饰板外墙外保温系统技术规程
- 安全生产一岗双责培训
- 关键时刻MOT完整讲义
- 业主大会业主委员会备案表
- 腹腔镜肾上腺切除术的临床应用
评论
0/150
提交评论