




已阅读5页,还剩85页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
方法与参数 93 2 方法 方法是一个功能模块方法和实例变量都必须定义在类内 方法是类的功能接口 定义方法的原则 方法应当只执行单一的任务 并且方法名能有效地表达该任务 方法的返回值类型 方法名和参数表共同称之为方法的特征 形参与实参 第4章Java的类 93 5 本章主要讲述的内容 类的定义和使用 方法的定义和使用 实例变量和局部变量 构造方法 方法的覆盖和重载 关键字this的用法 继承的概念和应用 组合与继承 抽象方法和抽象类 对象类型转换 访问权限限制符 public private protected 对象的引用 程序中的思想来源于生活人类社会的发展就是从面向过程到面向对象的过程人民公社承包制 责任清楚 编程 个人编程与小组编程Windows上千行代码耦合度责任 员 对象的思想 保管员 对象就是被承包的数据对外提供服务内部自己管理 具有确定边界的就是对象 一台电视机是对象命名为x19 x 尺寸x 颜色 红色x 开机 x 换频道 5 属性 方法 参数 执行服务的额外信息 4 1类与对象 类好比是图纸对象好比是房子类存在的理由 可能会创建多个房子类并不真正存在类创建对象的过程是 实例化 93 11 4 1类与对象 在Java程序中 除原子类型的变量以外都是对象 连Java程序本身也不例外 类是面向对象程序设计的基础 OO始终是围绕着对象的封装性 继承性和多态性展开讨论的 类是对象所应当具有的特征的描述类是抽象的存在对象是具体的存在对象对应着内存中的一片数据 93 13 4 1 1类与对象的区别 类是一个抽象的概念 对象是一个具体的概念 类是在一组对象的基础上 通过抽象和概括获得的一个概念 对象是由数据和方法紧密结合的一个封装体 具有信息隐藏的能力 对象可以通过方法 方法 与其它对象进行通信 但并不知道这些方法的实现细节 开发java的任务 使用已有的类编写自己的类使用自己的类创建对象调用对象的方法 属性去解决问题 隐藏内部的结构 好比手表内部的齿轮 发条显露其提供的功能 功能是使用者关心的 使用者不关心实现的细节 4 1 3如何定义类 93 17 4 1 3如何定义类 93 18 4 1 3如何定义类 续 系统类Object是整个类层次结构中的根 类内定义的变量称为实例变量 方法称为方法 Java将类的定义和类的实现放在一起 便于系统维护 例如 类与对象 图纸 class制造 new 93 21 4 1 4对象和引用 对象是客观存在的变量 对象的引用就是对象的名字 例如 pointp1 创建对象 p1 newpoint 一个对象可以有多个别名 将一个变量设置为null 表明该变量不代表任何对象 p1 null 每个对象都有自己的变量 改变一个对象的实例变量并不影响到另外一个对象 例如 93 22 4 2方法 续 调用方法的格式 引用 方法名 参数表 例如 pointp1 newpoint p2 newpoint p1 init 10 20 仅对p1对象的x和y进行赋值 93 23 4 3实例变量和局部变量 Java中的变量分为两种 类内定义的实例变量 方法中定义的局部变量 在同一个作用域内 不允许定义两个同名的局部变量 局部变量可以掩盖实例变量 classloc 程序4 2intx 1 实例变量voidprintLocVar intx 25 局部变量System out println nxis x x System out println xis x voidprintInstanceVar System out println nxis x x 10 System out println xis x publicclasstestInstanceVar 程序的主类publicstaticvoidmain Stringargs locobj newloc intx 5 局部变量xSystem out println xis x obj printLocVar obj printInstanceVar System out println xis x 93 26 4 3实例变量和局部变量 续 实例变量属于对象 它描述了对象的属性 随着对象的存在而存在 局部变量是随着方法的调用而存在 一旦方法调用结束 局部变量也就消亡了 实例变量和类变量 classdog floatx 实例变量staticinty 类变量 实例方法和类方法 floatmax floatx floaty 实例方法staticfloat intx 类方法 注意 实例方法能对实例变量进行操作 也能对类变量进行操作 而类方法只能对类变量进行操作 classA inta staticintb voidf intx inty a x b y staticvoidg intz b 24 a z 注意 一个类中的方法可以互相调用 实例方法可以调用该类中的其他方法 类中的类方法只能调用该类的类方法 注意 对成员变量的操作只能放在方法中 方法可以对成员变量和自己定义的局部变量进行操作 classA inta 12 floatb 123 4f classA inta floatb a 12 正确 b 12 3f 正确 思考为什么 93 34 4 4构造方法 构造方法的功能是在创建对象时初始化对象的实例变量 构造方法与类具有相同的名字 构造方法没有返回值 如果类中没有定义构造方法 编译器会自动创建一个缺省的 不带参数的构造方法 构造方法是在对象创建之后 new操作完成前被调用的 classpoint 程序4 3intx y point inta intb x a y b publicclasscreatePoint publicstaticvoidmain Stringargs pointp newpoint 10 20 System out println p x p y 思考 无构造方法怎么办 93 36 4 5方法重载 方法重载是在一个类中定义二个或多个同名的方法 但方法的参数个数或类型不完全相同 例如 classpoint intx y point inta intb x a y b point x 1 y 1 93 37 注意以下两点 一旦定义了构造方法 Java就不能再调用系统缺省构造方法 方法重载的一个误区是靠返回值区别重载 即定义多个方法 它们的名称和形参类型完全相同 但返回值不同 这是不允许的 对象比较 运算符与equals 方法的区别Strings1 newString abc Strings2 newString abc Strings3 s1 if str1 str2 System out println true elseSystem out println false 对象的生命周期 离开声明的 引用赋值空 一个对象两个引用 其中一个赋值空 垃圾回收 finalize 方法System gc 4 6关键字this 在类的方法定义中使用的this代表使用该方法的对象的引用当必须指出当前使用方法的对象是谁时要用this有时使用this处理方法中成员变量和参数重名的情况this可以看作一个变量 它的值时当前对象的引用 4 6关键字this 续 this指代对象可以用于解决实例变量被局部变量屏蔽的问题 例如 classpoint intx y voidinit intx inty this x x this y y 93 43 4 6关键字this 续 在构造方法内部使用this 它用于指代另外一个构造方法 但不能指代非构造方法 例如 classpoint intx y point this 1 1 point inta intb x a y b 93 44 4 7继承 继承是软件重用的一种形式 可以提高系统的性能 子类的对象也是其超类的对象 反之未必 继承语法 classclassNameextendssuperClassName 各实例变量和方法的定义 java只支持单继承 不允许多重继承java可以有多层继承 继承具有传递性 子类继承父类的的所有成员变量和成员方法 不继承父类的构造方法 私有成员 93 46 关键字super 构造方法是一种特殊的方法 子类不能继承父类的构造方法 但子类构造方法可以通过super调用父类的构造方法 93 47 再次讨论构造方法 若父类没有定义构造方法 那么对父类数据的初始化将采用系统缺省的构造方法 例如 classpoint intx y classcircleextendspoint intradius circle intr intx inty this x x this y y radius r 93 48 再次讨论构造方法 若父类定义有缺省构造方法 那么子类可根据自己的需要设置自己的构造方法 例如 classpoint intx y point this 0 0 point intx inty this x x this y y classcircleextendspoint 注意子类的构造方法intradius circle intr intx inty radius r 93 49 再次讨论构造方法 续 若父类定义的构造方法都是有参的 那么子类构造方法必须通过super调用父类构造方法 例如 classpoint privateintx y point intx inty this x x this y y classcircleextendspoint intradius circle intr intx inty super x y radius r 子类对象的实例化过程 1 分配成员变量的存储空间并进行默认初始化2 绑定构造方法参数 将new类名 参数列表 传递的参数赋值给构造方法的参数变量3 如有this调用 调用重载的构造方法 被调用的方法又从步骤2开始执行 被调用的构造方法执行结束后 回到当前构造方法 执行步骤6 4 显式或隐式追朔调用父类的构造方法 一直到object为止 父类的构造方法又从步骤2开始执行 父类的构造方法执行结束后 回到当前构造方法 当前构造方法继续往下执行5 进行实例变量的显式初始化操作 即定义成员变量时对其进行赋值的语句6 执行当前构造方法的其余代码 93 52 4 8方法的覆盖 方法的覆盖发生在父类和子类之间子类的方法名 参数列表 返回值完全和父类一样访问权限大于等于父类访问权限如需调用父类被覆盖的方法 super 方法的格式 93 53 4 8 1覆盖与重载的区别 重载可以出现在一个类中 也可以出现在父类与子类的继承关系中 并且重载方法的特征一定不完全相同 覆盖特点 子类中的方法特征与父类定义的对应方法的特征完全一样 例如 程序4 9classpoint intx y point this 0 0 point intx inty this x x this y y doublearea return0 classcircleextendspoint intradius circle intr intx inty super x y radius r doublearea returnMath PI radius radius 93 55 4 8 2方法的动态调用 Java的所有对象运行时都有一个类型标识 RTTI Run TimeTypeIdentification 该标识记录了每个对象所属于的类 Java用此标识在运行时选择正确的方法 例如 93 56 子类对象调用方法时 1 子类检查是否具有同名和同参数类型的方法 若有调用该方法 否则继续执行 2 到父类中寻找同名和同参数类型的方法 若有调用该方法 若找不到 将产生编译错误 对象决定自己到底该调用哪个方法 取决于该对象在继承链中的位置 93 57 4 9多态性不适合继承链中的实例变量 对象 方法 根据多态性调用 对象 实例变量 根据对象的类型调用 即 多态性仅仅适用于方法的调用 而不适合实例变量 93 58 4 12关键字final 在实例变量 局部变量和方法的形参定义之前加上final 那么这个变量值只能被引用 而不能修改 final修饰的局部变量和实例变量必须给出初值 代表一个常量 93 59 4 12 2final方法 在方法定义前加上final 该方法就不能被子类覆盖 成为终极方法 包含终极方法的类仍然可以被子类继承 子类虽然不能覆盖父类中的终极方法 但可以重载该方法 93 60 4 12 3final类 在一个类定义前加上final 意味着这个类就不能被其它类继承 成为终极类 系统类基本上都是final类 如String类 将class定义为final是为了杜绝继承 类中的方法自然都变成了终极方法 作业 1 编写Light类 该类拥有 成员变量 watts 私有 整型 用于存放灯的瓦数 indic 私有 布尔类型 用于存放灯的开或关的状态构造方法Light intwatts Light intwatts booleanindic 3成员方法publicvoidswitchOn 开灯 灯的状态置为开publicvoidswitchOff 关灯publicvoidprintInfo 输出灯的瓦数和开关状态 2 编写TubeLight类 继承Light类 拥有 2个成员变量tubeLength 私有 整型 存放灯管的长度color 私有 String类型 用于存放灯光的颜色构造方法TubeLight intwatts inttubeLength Stringcolor 成员方法publicvoidprintInfo 输出瓦数 开关信息 长度以及颜色 3 测试程序 要求 创建一个管状灯对象 瓦数为 32 长度为50 白色灯光 状态为开 打印输出该灯的相关信息 93 62 4 14抽象类和抽象方法 抽象方法 仅有方法特征 但没有代码 抽象类 包含抽象方法的类 但是 不包含抽象方法的类也可以是抽象类 抽象类的作用 提供一种适当的超类 子类通过继承实现父类中的抽象方法 抽象类不能用final修饰 抽象类体现了多态性 通过继承可以从抽象类派生出具有相似操作的子类 例如 5 3接口 什么是接口 所谓接口可以看作是没有实现的方法和常量的集合 接口与抽象类相似 接口中的方法只是做了声明 而没有定义任何具体的操作方法 使用接口是为了解决Java语言中不支持多重继承的问题 5 3 1实现系统提供的接口 Java已经创建了许多系统接口 如MouseListener和MouseMotionListener接口 定义了处理鼠标事件的方法 当一个类实现这两个接口后 就可以处理这些鼠标事件 在接口中定义的变量全部隐含为final和static 表明这些变量不能被实现接口方法的类改变 还必须设置初值 如果接口为public的 则接口中的方法和变量也全部为public 5 3 2创建自定义接口 创建自定义接口要使用声明接口语句 格式如下 修饰符 静态常量及方法声明 5 3 3接口的继承关系 1 接口的单继承2 接口的多重继承 1 接口的单继承 interfaceA voidF1 interfaceBextendsA voidF2 说明 接口B将继承接口A中的所有变量和方法 这种接口之间的继承称为单继承 接口之间的继承与类的继承一样使用关键字extends 2 接口的多重继承 在Java语言中 不支持类的多重继承 但是支持接口的多重继承 其语法格式如下 interface接口名extends接口名1 接口名2 可见接口的多重继承只是在单继承的基础上再加上几个接口 并把这些接口用逗号分隔开 93 69 4 15对象的类型转换 类型向上转换 upcasting 类型向下转换 downcasting 注意 对象类型转换只能发生在继承关系中 93 70 4 15 1向上类型转换 从子类向父类转换 在继承图中是向上移动 通常称为向上类型转换 类型向上转换是安全的 因为这是从特殊类型到通用类型的转换 进行向上类型转换时 出现的唯一问题是可能丢失子类中定义的方法和变量 93 71 4 15 2向下类型转换 从父类向子类转换 在继承图中是向下移动 称为向下类型转换 类型向下转换是不安全的 因为这是从一般类型到特殊类型的转换 用instanceof判断一个对象是不是一个类的实例 Object类 Object类equals 方法Students1 newStudent zhang 18 Students2 newStudent zhang 18 s1 equals s2 返回结果是true还是false 包 Java要求文件名与类名相同 将多个类放在一起时 要保证类名不能重复 当声明的类很多时 类名就有可能冲突 这就需要一种机制来管理类名 这就是包 一个包对应一个文件夹 包中还可以有包 称为包等级 如同文件夹中可以有子文件夹 同一个包中类名不能重复 不同包中可以有相同的类名 当源程序中没有声明类所在的包时 Java将类放在默认包中 即运行编译器的当前文件夹中 这时 不能出现重复的类名 包语句 包是java语言中有效管理类的一个机制通过关键字package声明包语句格式 package包名 包名可以是一个合法的标识符 也可以是若干个标识符加 分割而成 如packageage import语句 使用import语句可以引入包中的类可以有多个import语句必须写在package和源程序之间格式 importpackage1 package2 class name 采用 号不影响程序的运行性能 但会影响编译速度 指明具体类比引入整个包更为合理 Java中的包 大约130多个 常用的包如下 java lang 这个包包含了一些形成语言核心的类 提供了类似Character Integer和Double这样的封装类 它还提供了系统标准类 如String和StringBuffer Java编辑器总是自动装载这个包 javax swing 这个包提供了更丰富而且更加方便的用户界面元素集合 java awt 是由许多组成Java的抽象视窗工具 awt 的类所组成的包 它提供了基于类的图形用户界面 这个包提供了网络 套接字处理器和Internet实用工具类 java io 这个包中的类提供了输入输出服务 用于读出和写入文件数据 访问键盘输入和打印输出 java nio 这个包中的类提供了新的多路复用的非阻塞的输入输出服务 比面向线程的阻塞I O的可伸缩性更好 由选择器 可选择通道和选择键提供 java util 这个包包含为任务设置的实用程序类和集合框架类 java rmi 远程方法启用包 在这个包中的类提供了通过远程接口控制的分布式代码的支持 通过该包中的类 可以创建Java应用程序 使它的不同部分在不同的系统中一起运行 java sql 这个包提供了结构化查询语言数据库字段类型和方法的实现 java applet 这个包提供了创建Javaapplet的途径 Javaapplet运行在Web浏览器下 通常通过Internet下载 javax xml 这个包提供了操作XML文档的基础类 93 80 访问权限 Java提供的访问权限修饰符有四个 即public private protected和包修饰 修饰符要置于每个类成员的定义之前 且仅能控制它所修饰的那个成员 93 81 包修饰 缺省修饰符的情况就是包修饰 包修饰符意味着同一个目录 包 中的所有类都可以访问这种类型的成员 friendly不属于Java关键字 是C 的一个关键字 例如 publicclassBase 该类位于Base java文件中intfriend data 1 友元数据成员 该类位于Derived java文件中publicclassDerivedextendsBase Basep newBase 访问Base类中的friend datavoiddataUse System out println data p friend data 93 83 public成员 不管两个类是否位于
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 明星时装秀协议
- 2025年度社区绿色蔬菜直供合作协议
- 2025年社区便利店员工培训与业绩考核合作协议
- 2025年高品质茶叶种植基地与品牌加工企业合作框架协议
- 中国石油大学华东2024年9月《汽车理论》作业考核试题含答案
- 深静脉血栓防治理论知识考核试题及答案
- 慢性阻塞性肺疾病诊疗与护理考核试题及答案
- 弱电合同范本简单
- 龙岩四地市联考数学试卷
- 宁波高中学考数学试卷
- (2025年标准)委托他人要账协议书
- 2025-2030中国青少年无人机教育课程体系构建与创新能力培养研究
- 煤矿安全规程新旧版本对照表格版
- 2025山东“才聚齐鲁成就未来”水发集团高校毕业招聘241人笔试参考题库附带答案详解(10套)
- 中学2025年秋季第一学期开学工作方案
- 儿童急救流程
- GB 11122-2025柴油机油
- 私募薪酬管理办法
- 经营废钢管理办法
- 药品经营企业讲课课件
- 广东省深圳市海韵中学2026届中考押题语文预测卷含解析
评论
0/150
提交评论