




已阅读5页,还剩54页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAVA面向对象程序设计 第四章类与对象 本章的内容与目标类与对象及其关系封装数据成员成员方法 类与对象及其关系 类与对象及其关系 抽象原则抽象 abstraction 是从被研究对象中舍弃个别的 非本质的 或与研究主旨无关的次要特征 而抽取与研究有关的共性内容加以考察 形成对研究问题正确的简明扼要的认识 类与对象及其关系 对象的抽象原则面向对象编程中一般将要研究的客观事物抽象为对象标识 对象属性以及建立在这些属性之上的对象方法对象标识即对象名称属性用于描述对象的静态特征如 状态 数据 目标等方法用于描述对象的动态特征如 行为 动作 功能等例 宠物 类与对象及其关系 类与对象对象是对某个具体客观事物的抽象 类是对对象的抽象描述 在语言中是一种抽象的数据类型 类与对象及其关系 类与对象类的定义在Java中可简述为class类名 它们的关系是 对象是类的实例 类是对象的模板 类与对象及其关系 类定义属性和方法 classFighterPlane Stringname intmissileNum voidfire if missileNum 0 missileNum 1 System out println nowfireamissile else System out println Nomissileleft 类的属性 类的方法 类与对象及其关系 类定义类的图形描述UML类图 unifiedmodelinglanguage 说明类中定义的域变量可以被类中所有的方法所访问方法中的形式参数和定义的局部变量的作用域仅限于方法 局部变量在使用前必须进行赋值初始化类中定义的方法可以进行递归调用 类与对象及其关系 类定义斐波那契数列求和 publicclassFibonacci publicstaticintfseq intn if n 1 return 1 进行参数校验if n 1 n 2 return1 elsereturnfseq n 1 fseq n 2 publicstaticvoidmain Stringargs System out println fseq 10 类与对象及其关系 包与类库Java中 系统定义好的类根据实现的功能不同 可以划分成不同的集合 同时 随着Java的发展 SUN以及各开发商 程序员自己开发的类越来越多 也需要进行有效的组织 管理和使用 包就是JAVA提供的有效管理各种类的机制如果一个类属于某个包 那么它的存储位置就由这个包决定了 类与对象及其关系 包与类库包的声明 package包名 包名可以是合法标识符 也可以是用 连接的若干个标识符但是 自定义包中不能用 连接java 因为这个包预留给java的附带类库了例 sina 类与对象及其关系 包与类库包的存储位置与运行如果一个类有包名 就必须在指定位置 与包同名 存放运行时必须返回上一级目录才能运行例 设类定义中使用了test1作为包名 则编译后生成的 class文件必须放在 test1 目录下才能够运行运行时返回上一级目录 按照以下方式输入javatest1 主类名如果包名为 sina 则对应存储目录为 cn com sina 运行时需要返回cn的上一级目录 类与对象及其关系 包与类库Java类库是Java系统自带的包的集合 是已经实现了的标准类有效地使用这些类可以大大提高开发效率Java提供了100多个包 通过import语句引入程序格式为 import类名 或包名 例 importjava util importjava awt checkbox 类与对象及其关系 常用java类库java lang系统类核心类库 包含了java运行必不可少的基本语言类规则自动加载 不需要importjava io输入输出类包含了程序与操作系统 用户界面以及其他程序之间的数据交换所使用的类java awt抽象窗口工具类用于开发图形用户界面 类与对象及其关系 常用java类库java swing图形界面建立在awt基础上的图形 文本 窗口类与awt相比 速度较慢 但功能更好一般硬件资源比较有限的系统 嵌入式系统 使用awt 标准开发使用swingjava util数据结构相关包括了一些底层的工具 如数组 栈 链表等 类与对象及其关系 常用java类库java applet浏览器类用于实现运行于浏览器的程序开发的工具类网络功能类实现网络功能的类库java sql数据库类包含操作数据库的类 类与对象及其关系 创建对象声明对象格式 类名 对象名 例 FighterPlaneplane1 plane2 类 类与对象及其关系 创建对象建立对象格式 对象名 new构造方法 例 plane1 newFighterPlane 类 类与对象及其关系 创建对象建立对象plane1 newFighterPlane 语句完成以下工作1 为对象的每个成员name missileNum变量分配内存 同时执行构造方法2 如果构造方法没有对成员变量初始化 则用默认初值初始化 整型为0 浮点为0 0 布尔型为false 引用型为null3 返回一个引用给plane1 确保这些变量是属于plane1的 可以通过plane1进行管理 这个引用里包含了变量的内存位置关系和相关信息 类与对象及其关系 创建对象初始化对象一般通过构造和new关键字默认初始化也可以通过赋值语句初始化例 plane1 name apache plane1 missileNum 10 类与对象及其关系 使用对象数据成员的使用对象名 数据成员名方法的使用对象名 方法 参数表 类与对象及其关系 构造构造方法与类名相同 用于类成员数据的初始化不能指定构造方法的类型构造方法一般不直接调用 而是在创建类的实例时自动调用构造方法可以重载 即允许多个不同形式的构造函数构造方法可以继承 及子类继承父类的构造方法如果没有构造方法 系统会自动匹配一个空构造方法 类与对象及其关系 构造对上例运用构造方法 封装 封装机制 封装面向对象的三大基石 封装 继承 多态封装 Encapsulation 就是把不想或者不该告诉别人的东西隐藏起来 把可以告诉别人的公开设置对象数据和方法的权限 使其他对象不能直接修改本对象的属性和方法隐藏对象的属性和方法的实现细节 只公开对外接口 封装机制 封装为什么要使用封装 例 谁陷害了兔子罗杰 封装机制 看看是谁干的 首先我们创建一个卡通类 代表卡通人物可以看出来 卡通类有两个属性 姓名 人品 具有自我介绍的行为 兔子罗杰是怎么被人陷害的呢 看看下面这位童鞋编写的代码 封装机制 童鞋代码 人品被赋值为 1 封装机制 可以看出 兔子罗杰被惨无人道的陷害了 怎么回事呢 细心的同学能够看出来 卡通类的两个属性都是公有的 可以被随意访问 我们无法控制这些属性的值 这就导致了以上的问题 那么如何解决呢 这个时候我们就需要用到封装 因为它很好的解决了这个问题 我们只需要将成员变量的属性改为private 再配合get set函数 就可以轻易的控制对成员变量的修改 封装机制 属性私有 用private关键字修饰 提供公有的方法访问私有属性 可以在方法中实现对属性的控制 上述示例中学员类的两个属性都被声明为私有的了 private 也就是说这两个属性只能被Cartoon1这个类访问 其他所有类都不能访问 那么怎么给这两个属性赋值 又如何取得这两个属性的值呢 我们来看下面这位童鞋的代码 封装机制 封装机制 类的严谨定义 类修饰符 class类名 extendes父类名 implements接口 数据成员成员方法 类修饰符 qualifier 用于规定类的属性 如访问限制extendes父类名 指明新定义类的父类 从而继承父类的某些特征implements接口列表 用于实现多重继承 封装机制 类修饰符 访问限制 public公共的 最高的访问级别 类的public成员所有类的成员都可以访问 protected受保护的 类的protected成员只能被该类的成员以及其子类成员访问 还可以被同一个包中其他类的成员访问 private私有的 不对外公开 类的private成员只能被该类的成员访问 访问级别最低 默认 类的成员什么修饰符都没有 又叫包修饰符 只有类本身成员和当前包下类的成员可以访问 封装机制 类修饰符 访问限制 访问修饰符的作用域同样适用于定义类的数据成员和方法访问权限先看类前的修饰符 再看成员和方法前的修饰符 封装机制 类修饰符 访问限制 封装机制 类修饰符 最终类final 最终类不能被继承 即不能有子类定义最终类的目的 用来完成某种标准功能 如Java系统定义好的用来实现网络功能的InetAddress Socket等类都是final类 将一个类定义为final 则可以将它的内容 属性和功能固定下来 保证这个类时所实现的功能的正确无误 提高程序的可读性 从父类派生子类 再从子类派生子类 使软件变得越来越复杂 而在必要的层次上设置final类 可以提高程序的可读性 提高安全性 病毒的闯入途径之一是在一些处理关键信息的类中派生子类 再用子类去代替原来的类 由于用final修饰符定义的类不能再派生子类 截断了病毒闯入的途径 提高了程序的安全性 封装机制 类修饰符 抽象类abstract 抽象类只允许声明 不允许实现 即 不能被实例化作用 抽象类是实现多态的一种重要机制抽象类可以定义非抽象的子类 从而通过继承机制把特征传递给其子类 抽象类不能同时定义为final类如果一个类中使用了abstract定义的抽象方法 则必须将这个类定义为抽象类具体内容第五章介绍 数据成员 数据成员 数据成员一个类的数据属性由它的数据成员 也称为 域field 定义在类中声明一个数据成员的形式为 修饰符 类型数据成员名 如 privateintx staticdoublead 8 数据成员 static关键字static修饰符修饰的数据成员或方法是不属于类的具体对象的 而是属于类的静态数据成员和方法用static定义的数据成员称为类成员或类变量 一般的成员或变量称为实例成员或实例变量其特点是 类变量保存在类的内存区中 实例变量保存在某个对象的内存区中类变量可以通过类名 变量名去访问 实例变量不可以仍可以使用访问限制修饰符public private 去修饰 数据成员 static关键字特点1 类变量保存在类的内存区中 实例变量保存在某个对象的内存区中实例变量在定义类时是不分配内存空间的 只有通过new运算符定义类的实例时才分配内存类变量在定义类时即分配内存 定义对象后 所有对象的该变量都指向同一内存地址 共享类变量释放内存时 类变量只有程序退出运行 才释放所占有的内存空间总之 类变量是与类相关联的变量 数据成员 static关键字例 数据成员 static关键字以下程序的输出 数据成员 static关键字静态代码块一个类中可以使用不包含在任何方法体中的静态代码块当类被装载时 静态代码块被执行 且只被执行一次静态代码块经常用来对类中定义的属性进行初始化例 以下程序的输出 数据成员 final关键字final修饰的数据成员 被限定为最终数据成员 最终数据成员可以在声明时进行初始化 也可以通过构造方法赋值 但不能在程序的其它部分赋值 最终数据成员的值在程序的整个执行过程中是不能改变的 即 常量用final修饰符说明常量时 需要注意以下几点 需要说明常量的数据类型并指出常量的具体值 若一个类有多个对象 而某个数据成员是常量 最好将此常量声明为static 即用staticfinal两个修饰符修饰 这样做可节省空间 成员方法 成员方法 方法的声明格式 修饰符 返回类型方法名 形式参数表 方法体 例 publicstaticvoidmain Stringargs 成员方法 方法的声明修饰符 public protected privated及缺省 返回类型 一个方法必须声明其返回类型 如果无返回值 则必须声明其返回类型为void 方法名可以是任何合法的Java标识符 形式参数 当编写一个方法时 要声明该方法所需要的若干参数和这些参数的类型方法体 方法体中包含了实现这个方法具体功能的代码 成员方法 成员变量与局部变量类中定义的变量为成员变量 作用域为整个类方法或语句块中定义的变量为局部变量 作用域为方法或语句块内部成员变量的类型可以是java中任意的数据类型在一个类中 成员变量是唯一的方法中定义的局部变量不能在同一方法的语句块中再次定义若方法声明的局部变量与封装该方法的类声明的一个实例变量同名 则在该方法的作用域中 局部变量屏蔽实例变量 若要在该方法中访问被屏蔽的实例变量 则 this 变量名 成员变量可以使用修饰符 局部变量不可以使用修饰符 成员方法 成员变量与局部变量参考以下代码 成员方法 方法的参数传递Java的参数传递方式是通过实参到形参的 值传递 来进行的要区分如下两种情况 当方法的参数为简单数据类型时 是真正意义上的值传递 将实参的值传递给形参 此时 方法调用中的改动不会影响主方法中的实参当方法的参数为复合数据类型 对象 数组 时 则将实参的地址传给形参 即引用传递 此时 方法调用中的改动会影响主方法中对应的复合数据类型如果类中声明了private成员变量 则只能通过该
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年导电银浆合作协议书
- 营销推广战略合作协议细节规定
- 商务酒店客房预订管理协议
- 2025年广西2024危险品从业资格考试
- 2025年钢材:一级钢项目发展计划
- 公司职员职务晋升证明(6篇)
- 专业演出票务销售网络协议
- 电商仓储管理系统开发合同
- 2025年移动通信用智能天线项目发展计划
- 跨文化交际培训方案实施指南
- 2024年熔化焊接与热切理论考试1000题及答案
- 弱电机房设备与系统巡检记录表全套
- 工商管理论文8000字【9篇】
- 全自动进销存电子表格系统模板53
- MOOC 猪生产学-南京农业大学 中国大学慕课答案
- 内蒙古呼和浩特市2024届小升初考试语文试卷含答案
- 贵阳市普通住宅小区物业管理服务收费参考标准
- MOOC 地学景观探秘·审美·文化-重庆大学 中国大学慕课答案
- 丁苯橡胶工艺流程
- (高清版)WST 311-2023 医院隔离技术标准
- 2024年电梯安装与维修工理论考试题库及答案(通用版)
评论
0/150
提交评论