




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在本课中 您将学习 声明和创建原始 类或数组类型的数组说明如何初始化数组的元素确定数组中元素的数量创建多维数组编写代码将数组的值从一个数组复制到另一个数组定义继承 多态 重载 覆盖和虚拟方法调用定义异类收集 目标 数组 声明数组 相同类型的组数据对象 数组是对象 声明原始或类的类型的数组 chars Pointp char s Point p 数组的声明创建了一个引用的空间 实际的内存分配由new语句或数组初始化程序动态完成 创建数组 为了创建数组对象 使用new关键字创建和初始化原始 char 数组的示例 publicchar createArray char s s newchar 26 for inti 0 i 26 i s i char A i returns 创建数组 续 创建原始字符的数组 创建引用数组 以下代码段创建10次引用类型Point的数组 publicPoint createArray Point p p newPoint 10 for inti 0 i 10 i p i newPoint i i 1 returnp 创建引用数组 续 创建具有Point对象的原始字符的数组 让我们来看如何声明 创建和操作引用类型元素的数组 示范 多维数组 多维数组是一个数组的数组 例如 int twoDim newint 4 twoDim 0 newint 5 twoDim 1 newint 5 第一次调用new创建一个对象 即包含四个元素的数组 每个元素是对int的类型数组元素的空引用 每个元素必须分别被初始化 使每个元素指向其数组 数组边界 所有数组下标以0开始 数组中元素的数量作为length属性中数组对象的一部分来存储 以下代码使用length属性来迭代数组 publicvoidprintElements int list for inti 0 i list length i System out println list i 增强的循环 Java2平台标准版本 J2SE 版本5 0已引入对数组迭代的增强的for循环 publicvoidprintElements int list for intelement list System out println element for循环可像列表中的每个元素一样被读取 数组重新调整大小 不能对数组重新调整大小 可使用相同的引用变量来引用整个新的数组 如 int myArray newint 6 myArray newint 10 在上述例子中 第一个数组有效地丢失 除非对其的另一个引用在别处得以保留 复制数组 Java编程语言提供System类中的一个特殊方法arraycopy 来复制数组 例如 intmyarray 1 2 3 4 5 6 originalarrayinthold 10 9 8 7 6 5 4 3 2 1 newlargerarraySystem arraycopy myarray 0 hold 0 myarray length copyallofthemyarrayarraytotheholdarray startingwiththe0thindex数组包含的内容为 1 2 3 4 5 6 4 3 2 1 System arraycopy 方法处理对象数组时复制引用 而非对象 Employee类和Manager类 publicclassEmployee publicStringname publicdoublesalary publicDatebirthDate publicStringgetDetails publicclassManager publicStringname publicdoublesalary publicDatebirthDate publicStringdepartment publicStringgetDetails 代码重用 ReusingClasses 类重用有两种方式 Composition 组合 非常直观 只需要在新类里面创建已有类的对象 Inheritance 继承 创建一个新类作为已存在类的一种类型 继承 继承指从父类 基类 获取一组属性和相关的行为 继承的好处 减少代码中的冗余代码容易维护扩展现有类的功能 单重继承子类来源于一个超类 Java语言中 当你生成一个类时 始终在做着继承 因为所有的Java类都隐式地继承了Java的标准根类Object 单重继承的示例如下所示 继承 续 Java不支持多重继承 接口既提供了多重继承的优点又避免了其缺点 Java类实现继承的语法如下所示 class extendssuperclass 继承 续 访问控制 变量和方法可以是四种访问级别之一 publicprotecteddefaultprivate类可以是public或default级别 默认可访问性 如果不是显示指定 是包可见 package friendly 或包私有 package private 的 让我们来看一个创建子类的例子 类Cleanser和类Detergent两个类均有main 方法 继承的基本原则 allfields privateallmethods publicCleanser的append dilute apply scrub toString 方法都包含在Detergent类里面 Detergent的main 方法里面调用Cleanser的main 方法 传递同一个参数args 覆盖scrub 方法 scrub 方法里面使用关键字super来访问父类的方法 新增foam 方法 示例 覆盖方法 Overriding翻译过来是 重写 覆盖 它是覆盖了一个方法并且对其重写 以求达到不同的作用 子类可修改从父类继承的行为 子类可创建具有与父方法的不同功能的方法 但是具有以下相同的项 名称返回类型参数列表 覆盖方法 续 重写的主要特点 方法名 参数列表 返回类型必须与被重写方法一致 重写的方法不能降低原方法的 可见度 不能抛出新的异常或者 更高级别的 异常 被覆盖的方法不能为private 否则在其子类中只是新定义了一个方法 并没有对其进行覆盖 覆盖方法 续 子类方法通过使用super关键字可调用父类的方法 关键字super在类中使用来引用其父类 关键字super用来引用父类的成员 包括数据属性和方法 调用的行为不必一定在父类中 它可以是层次结构中的上一层 覆盖方法 续 使用super关键字调用覆盖方法 publicclassEmployee privateStringname privatedoublesalary privateDatebirthDate publicStringgetDetails return Name name nSalary salary 覆盖方法 续 publicclassManagerextendsEmployee privateStringdepartment publicStringgetDetails callparentmethodreturnsuper getDetails nDepartment department 覆盖方法 续 JavaSE5中 方法名 参数列表 返回类型必须与被重写方法一致的匹配原则稍微有所改变 Covariant返回类型允许覆盖方法的返回类型可以是 在基类中被覆盖方法的返回类型的子类 举例Covariant java Upcasting 例子 Wind java继承确保了父类中的所有方法在子类中也是可以得到的 任何发送给父类的消息同样也可以发送给子类 即类Instrument有play 方法 类Wind也有该方法 这意味着一个Wind对象也是Instrument类型的 tune 方法 它实际接收的是Instrument引用 但是在Wind main 中tune 方法操纵的是Wind引用 tune 方法里 它可以接受Instrument类型以及任何继承自Instrument的类型 这里 将Wind引用转换成Instrument引用的过程 叫做upcasting Upcasting 续 为什么是upcasting Upcasting总是安全的 因为这是从特殊走向一般 一般拥有的 特殊里面也会有 此时你只是丢失了方法 而不是增加了方法 因此upcasting不需要被显示地执行 多态 多态是具有许多不同形态的功能 例如 Manager类具有对Employee类的方法的访问权 对象只有一种形态 引用变量可引用不同形态的对象 Java编程语言允许您通过一个父类类型的变量引用对象 例如 Employeee newManager legal但e只能访问Employee中的一些对象 Manager的特定部分被隐藏 编译时e就是Employee类型的 例如 e department Sales illegal 动态绑定 绑定 将方法调用与方法体关联的过程叫做绑定 早期绑定 当绑定是在程序运行之前由编译器或者是链接程序完成时叫做早期绑定 后期绑定 动态绑定 运行时绑定 基于对象的类型 绑定在运行时完成 Java语言里面 除了static或者final以外的方法 都使用动态绑定 虚拟方法调用 获得的是运行时与变量引用的对象的相关行为 该行为不是由编译时的变量类型决定的 这一行为通常称为虚拟方法调用 虚拟方法调用如下所示执行 Employeee newManager e getDetails 编译时类型和运行时类型调用具有以下特征 方法名必须是声明的变量类型的成员 在此例中Employee具有名称为getDetails的方法 使用的方法实现基于运行时对象的类型 在此例中Manager类具有getDetails方法的实现 异类集合 异类集合 具有相同类的类型的对象集合称之为同类集合 例如 MyDate dates newMyDate 2 dates 0 newMyDate 22 12 1964 dates 1 newMyDate 22 7 1964 具有不同类的类型的对象集合称之为异类集合 例如 Employee staff newEmployee 1024 staff 0 newManager staff 1 newEmployee staff 2 newEngineer 多态示例 例子 package shapeShape javaCircle javaSquare javaTriangle javaRandomShapeGenerator javaShapes java 陷阱1 覆盖 private方法 只有non private方法能够被覆盖举例 PrivateOverride java虽然子类里面有与父类同名的方法 但是private方法自动就是final的 final方法相当于关闭了该方法的动态绑定机制 即该方法是不能被覆盖的 因此 子类里面的方法相当是声名了一个新的方法 虽然覆盖private方法编译不会出现警告 但是却不能得到预期的结果具有相同类的类型的对象集合称之为同类集合 陷阱2 成员变量和static方法 举例 FieldAccess java只有普通方法调用是多态的如果访问一个成员变量 实际上在编译的时候就已经确定了举例 StaticPolymorphically javaStatic方法也不是多态行为的 instanceof运算符 对象可以通过引用传递给它们的父类 而有时会需要确切知道是什么对象 这正是使用instanceof运算符的目的 publicvoiddoSometing Employeee if einstanceofManager processamanager elseif einstanceofEngineer processaengineer else processanyothertypeofEmployee 小结 在本课中 您学习了 数组是用来对相同类型的数据对象分组的对象 数组可以是原始的或类的类型 可使用关键字new来创建数组 多维数组是数组的数组 所有数组的下标以0开始 数组中元素的数量作为length属性中数组对象的一部分来存
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 达标测试人教版9年级数学上册《圆》达标测试试题(详解版)
- 水泵供水工程施工方案
- 2026届山东省聊城阳谷县联考化学九上期中预测试题含解析
- 培训学校母亲节
- 2026届湖南省娄底市娄星区英语九上期末教学质量检测模拟试题含解析
- 足球培训机构合作
- 2026届北京市海淀中学化学九年级第一学期期末达标检测试题含解析
- 北京延庆县联考2026届英语九年级第一学期期末监测模拟试题含解析
- 2026届重庆市南开中学化学九上期中考试模拟试题含解析
- 湖北省武汉市楚才中学2024-2025学年八年级上学期10月月考物理试题(无答案)
- GB/T 29788-2013辐射防护仪器便携式表面污染光子测量仪和监测仪
- GB/T 18666-2014商品煤质量抽查和验收方法
- GB 3452.1-1992液压气动用O形橡胶密封圈尺寸系列及公差
- 坏死性筋膜炎49390课件
- JT∕T 651-2022 牵引杆挂车转盘
- 某公司项目启动会(38张)课件
- 全国水土保持规划国家级水土流失重点预防区和重点治理区复核划分
- DB13(J)∕T 269-2018 电动汽车充电站及充电桩建设技术标准
- 德国凯尔锚固技术公司石陶幕墙设计和施工中的应用
- 机动车交通事故快速处理协议书
- 临床营养支持小组工作方案
评论
0/150
提交评论