Java类和对象.ppt_第1页
Java类和对象.ppt_第2页
Java类和对象.ppt_第3页
Java类和对象.ppt_第4页
Java类和对象.ppt_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java与面向对象技术 面向对象的概念简单地说面向对象编程 ObjectOrientedProgramming 简称OOP就是使我们分析 设计和实现一个系统的方法尽可能地接近我们认识一个系统的方法 描述对象之间的相互作用 面向对象的方法包括 面向对象的分析 OOA Object OrientedAnalysis 面向对象的设计 OOD Object OrientedDesign 面向对象的程序设计 OOP Object OrientedProgram 面向对象技术主要围绕以下几个概念 对象 抽象数据类型 类 类型层次 子类 继承性 多态性 面向对象的概念 面向对象的概念 面向对象编程和面向过程编程的区别过程化设计先确定算法 再确定数据结构 面向对象编程先确定数据结构 再确定算法面向过程的程序员习惯于建立数据结构存放数据并定义方法 函数 来操作数据 而面向对象程序员则构造对象模型 将数据与方法组织在一起 面向对象程序设计方法 OOP 面向对象程序设计方法的优点可重用性可扩展性可管理性面向对象程序设计语言 OOP的四个基本机制抽象封装继承与派生多态性 OOP的抽象 含义 对具体问题 对象 进行概括 抽出这一类对象的公共性质并加以描述的过程 要求 先注意问题的本质及描述 其次是实现过程或细节 所涉及到的主要内容 数据抽象 描述某类对象的属性或状态 对象相互区别的物理量 代码抽象 描述某类对象的共有的行为特征或具有的功能 如何实现抽象 对问题进行分析 提取其属性和行为 OOP抽象的编程要点 抽象是有选择性的忽略决定什么是重要的 什么不是聚焦并依赖于那些重要的忽略那些不重要的 Java中的对象 含义 它是具有该类类型的一个特定的个体 是类的一个变量 对象 实体 类 抽象数据类 实例化 抽象 映射 计算机世界 现实世界 抽象 计算机逻辑的实现 举例说明 对客观世界进行抽象自行车 数据 属性或者状态 车架尺寸车轮尺寸牌子材料名称 操作 方法或者功能 变速移动修理 Windows窗口数据 属性 颜色样式标题位置 操作 方法 打开窗口改变大小移动位置 OOP的封装 含义 提供将所抽象出的问题的属性 数据成员 和行为 代码成员 相组合的一种机制 它能将这二类成员再组合在一起 形成对象或实体 目的 增强使用的安全性 使用者不必了解具体的实现细节 而只需要通过设计者提供的外部接口来操作它 优点 实现高度模块化 从而产生出软件构件 控件 利用控件快速地组装程序 客户可以调用一个并不了解内部机制的对象的方法任何关于内部的改动对客户来说都是隐藏的 封装把对象的所有组成部分组合在一起 封装定义程序如何引用对象的数据 封装实际上使用方法将类的数据隐藏起来 控制用户对类的修改和访问数据的程度 OOP的封装 OOP的封装 封装的基本要求 有一个特定的边界 所有的内部变化都限制在此边界内 类定义的 有外部接口 此对象利用它与其它对象发生关联 public成员 有特定的访问权限 在对象外部不能访问或修改受保护的内部实现细节 private成员 面向对象基本概念 面向对象的程序设计 OOP 已成为现代软件开发的必然选择 通过掌握面向对象的技术 能开发出复杂 高级的系统 这些系统是完整健全的 但又是可扩充的 OOP是建立在把对象作为基本实体看待的面向对象的模型上的 这种模型可以使对象之间能相互交互作用 面向对象程序设计在一个好的面向对象程序设计语言 OOPL 的支持下能得到最好的实现 Java就是一种优秀的OOPL 它提供了用来支持面向对象程序设计模型所需的一切条件 Java有自己完善的对象模型 并提供了一个庞大的Java类库 并有一套完整的面向对象解决方案和体系结构 面向对象技术 正是利用对现实世界中对象的抽象和对象之间相互关联和相互作用的描述来对现实世界进行模拟 并且使其映射到目标系统中 所以面向对象的特点主要概括为抽象性 继承性 封装性和多态性 抽象性 指对现实世界中某一类实体或事件进行抽象 从中提取共同信息 找出共同规律 反过来又把它们集中在一个集合中 定义为所设计目标系统中的对象 继承性 新的对象类由继承原有对象类的某些特性或全部特性而产生出来 原有对象类称为基类 或超类 父类 新的对象类称为派生类 或子类 派生类可以直接继承基类的共性 又允许派生类发展自己的个性 继承性简化了对新的对象类的设计 封装性 是指对象的使用者通过预先定义的接口关联到某一对象的服务和数据时 无需知道这些服务是如何实现的 即用户使用对象时无需知道对象内部的运行细节 这样 以前所开发的系统中已使用的对象能够在新系统中重新采用 减少了新系统中分析 设计和编程的工作量 多态性 是指不同类型的对象可以对相同的激励做出适当的不同相应的能力 多态性丰富了对象的内容 扩大了对象的适应性 改变了对象单一继承的关系 面向对象程序的特点 面向对象基本概念 封装 继承和多态 封装 隐藏实现细节继承 实现软件可重用的重要方式多态 重载 overload 和覆盖 override 对象有两个层次的概念 现实生活中对象指的是客观世界的实体 程序中对象就是一组变量和相关方法的集合 其中变量表明对象的状态 方法表明对象所具有的行为 面向对象的概念 对象 对象对象的状态对象的行为我们可以把现实世界的事物抽象成对象对象有两个特征 状态 state 和行为 behavier 软件的对象概念是由现实世界对象抽象而来的 把现实世界对象的状态保存在软件对象的变量中 把现实世界对象的行为通过软件对象的方法来实现比如我们人这个类本身我们可以写一个类见Classtest类 面向对象的概念 对象 可以将现实生活中的对象经过抽象 映射为程序中的对象 对象在程序中是通过一种抽象数据类型来描述的 这种抽象数据类型称为类 Class 面向对象的概念 对象 类是描述对象的 基本原型 它定义一类对象所能拥有的数据和能完成的操作 在面向对象的程序设计中 类是程序的基本单元 相似的对象可以归并到同一个类中去 就像传统语言中的变量与类型关系一样 程序中的对象是类的一个实例 是一个软件单元 它由一组结构化的数据和在其上的一组操作构成 面向对象的概念 类 面向对象的概念 类 从程序设计的角度看 类是面向对象程序中最基本的程序单元 类实质上定义的是一种数据类型 这种数据类型就是对象类型 我们可以使用类名称来声明对象变量声明对象变量之后 还不能使用对象 必须用运算符new创建对象实体之后 才能使用对象 为什么要使用类 采用简单数据类型表示现实世界中概念的存在很大的局限性 例如 采用int型数据表示一个日期概念 需要使用3个变量 intday month year 如果要表示2个人的生日 就要使用6个变量并且在使用中必须时刻注意三者的联系和约束关系同时在使用日期概念时要同时对三个变量进行访问使用类可以把现实问题中的对象映射为程序中的一个整体 类 面向对象的概念 类 类中不但有变量 还有与之相关的操作所定义的方法 将变量和方法封装在一个类中 可以对成员变量进行隐藏 外部对类成员的访问都通过方法进行 能够保护类成员不被非法修改 classBirthDate publicintday month year publicinttomorrow BirthDatemybirth yourbirth BirthDatedate 已知当前日期对象 求第2天的日期对象 date day date day 1 如果date day已经为31 操作结果是非法状态 可以定义一个成员方法tomorrow 求第2天的日期对象 外部要获得当前日期的后一天时 只要调用 date tomorrow 面向对象的概念 类 定义类 类声明 class extends implements 变量声明 构造方法 方法声明与实现 定义类 声明成员变量 数据类型声明成员方法 参数列表 throws 声明main方法publicstaticvoidmain String args 定义类 注意 类的成员变量在类的主体中 且不在方法体中声明 类的成员方法中可以声明变量 称为局部变量 局部变量的作用域在方法内部 可与成员变量同名 如果类的成员方法有返回值 方法中必须以return语句返回 程序执行到return就返回而忽略其后所有语句 否则 return可省略返回类型可以是任意的Java数据类型 当一个方法不需要返回值时 返回类型为void 类和对象 实例 类与对象定义类使用对象成员变量和局部变量的初始化成员变量和局部变量同名的情况 定义People类 使用对象 声明对象 的引用变量 类名变量名 对象的实例化 new 将引用指向实例 格式 变量名 new 引用对象的成员变量和调用对象方法对象 成员变量对象 成员方法 参数列表 1 对象的生成通过new操作符生成一个对象 例如 Peoplep1 p1 newPeople 2 对象的构造过程为对象开辟空间 调用构造方法 返回对象的引用 使用对象 使用对象 对象的引用模型 类是对象的模板 同一个类可以创建多个对象 每个对象有各自的内存空间 不会互相影响 栈内存 对age的访问 堆内存 p1 getAge 30 age P1标识的对象 对age的访问 p2 getAge 0 age P2标识的对象 类和对象 实例 关于方法的参数传递当参数分别是对象的引用 字符串和数组的引用时的情况 使用People类 构造方法和析构方法方法的重载this引用和instanceof对象运算符类及其成员的访问权限实例成员与类成员 构造方法与析构方法 构造方法是一类特殊的成员方法 用于创建类的实例并初始化对象 声明构造方法构造方法与类同名 且没有返回值类型 注意 Java为每个类提供一个默认的无参的构造方法 但当自行声明了构造方法后 这个默认的无参构造方法不再提供构造方法无返回值类型 有返回值 即使是void 的成员方法不是构造方法构造方法可以重载 构造方法与析构方法 析构方法声明为 protectedvoidfinalize 一个类只有一个finalize方法 不能重载 没有返回值 Java程序中的对象有垃圾回收器 garbagecollector 自动释放 因此实际上finalize并不做释放资源的工作 通常被省略 构造方法与析构方法 关于构造方法和析构方法构造方法的作用默认构造方法析构方法Construct1 java Java中变量的缺省初值都是确定的 布尔变量的初值为 false整数变量的初值为 0浮点数变量的初值为 0 0引用 复合 变量的初值为 null在方法实现中定义的变量必须显式的初始化 变量的作用域指可访问变量的一段代码 在程序中不同的地方声明的变量具有不同的作用域 局部变量 类变量 方法参数 例外处理参数 在一定的作用域内 变量名必须唯一 方法的重载 方法的重载带有不同参数列表的同名方法重载的条件方法名相同参数列表必须不同 即以不同的参数个数 类型 次序来区别重载方法返回值不能区别重载的方法 方法的重载 拷贝构造方法由同一个类的已知对象创建新对象的构造方法能够实现对象的复制 方法的重载 关于方法的重载构造方法的重载拷贝构造方法 this引用和instanceof对象运算符 this指代调用本方法的当前对象本身 this三种用法指代对象本身访问当前对象的成员调用本类的其他重载的构造方法 this用法 publicclassThistest3 privateinti 0 Thistest3increment i returnthis voidprint System out println i i publicstaticvoidmain String args Thistest3x newThistest3 x increment increment increment print this print 类方法中不能使用this this引用和instanceof对象运算符 Instanceof运算符判断一个对象是否是指定类或其子类的实例 类及其成员的访问权限 对类成员的访问权限类成员的访问权限按照级别从高到低依次是 共有 public 受保护 protected 友好 不用任何修饰符 和私有 private 注意 访问权限修饰符只适用于类的成员 不能修饰方法中的局部变量 类及其成员的访问权限 类成员访问权限的说明 类及其成员的访问权限 类及其成员的访问权限 classTest publicintpub protectedintpro intfri privateintpri publicTest pub 0 pro 0 fri 0 pri 0 类及其成员的访问权限 类的访问权限通常情况下 类的访问权限只有两种 public和缺省的 只有内部类可以有proteced和private的访问权限 public修饰的类可以用于在任何地方创建对象 而缺省的只能在本包中创建对象 实例成员与类成员 类中的成员分为 实例成员和类成员类成员由static关键字修饰 可以在未创建类的对象前就用类名直接调用类成员 使用static声明类成员的原因Static1 java 实例成员与类成员 实例成员变量和类成员变量存储结构的差别实例变量每次创建对象时才被分配空间类变量当类被加载时就分配空间访问方式的差别实例变量必须通过对象访问类变量不需要 实例成员与类成员 实例成员方法和类成员方法类方法在类被加载时就分配入口地址实例方法在创建第一个对象时分配入口地址 这个地址被所有对象共享类方法和实例方法中的局部变量当方法被调用时才分配空间类方法只能访问类方法和类变量实例方法能访问类方法 类变量 实例方法 实例变量类方法中不能使用this super等关键字 实例成员与类成员 类变量 实例变量 类方法 实例方法 类加载时分配 每次对象创建时分配 创建第一个对象时分配 实例成员与类成员 类成员和实例成员的创建时机及其调用关系Static2 java static和静态代码块 一个类中可以使用不包含在任何方法体中的静态代码块 staticblock 当类被载入时 静态代码块被执行 静态代码块只执行一次 静态代码块经常用来进行类属性的初始化static 成员属性初始化代码 类的继承性 什么是继承定义继承的类super引用final关键字初始化及class装载 什么是继承 面向对象中的两个重要概念 抽象和分类 抽象和分类是人们认识世界的基本方法 抽象是将现实世界中客观存在的事务映射到意识中的一种方法 分类是指确定这些抽象到意识中的概念之间的关系 这些关系的基本形式包括一般到特殊和整体与局部 什么是继承 在面向对象中 一般到特殊的关系用继承 Inheritance 表示 整体与局部的关系用组合 composition 表示 单继承 多继承 什么是继承 组合 什么是继承 继承的概念继承是由已有的类创建新类的机制 由继承得到的类称为子类 被继承的类称为父类 超类 基类 继承的作用实现软件可重用的重要方式增强软件可扩充性提高软件的可维护性 什么是继承 继承的原则子类继承父类的成员变量和成员方法子类不继承父类的构造方法 能够继承父类的析构方法子类不能删除父类的成员 但可以重定义父类成员子类可以增加自己的成员 定义继承的类 声明子类 classextendsObject类Java语言中所有的类都是Object的直接或间接子类 定义继承的类 子类对象对父类成员的访问权限子类对父类的私有成员 private 没有访问权限子类对父类的公有成员 public 和保护成员 protected 具有访问权限子类对父类中缺省权限成员的访问分两种情况 对同一包中父类的缺省权限成员具有访问权限 而对不同包中父类的缺省权限成员则没有访问权限 名称隐藏 Namehiding Java中子类中可定义与父类成员同名的成员子类隐藏父类的成员变量 在子类中直接访问父类的成员变量 通过super访问父类的同名成员变量子类覆盖 override 父类的成员方法子类重载 overload 父类的成员方法 向上转型 Upcasting 子类和父类具有isa的关系 例如对于父类 人 和子类 学生 我们可以说 学生 是 人 因此 可以使用父类的引用指代子类的实例 这种情况被称为Upcasting 上转型对象可以访问子类继承或覆盖的成员 不能访问子类中新增的成员上转型对象可以被重新赋值为子类实例 这时它又重新可以访问子类中新增成员 向上转型 Upcasting 上转型对象Upcasting java super引用 super用来引用当前对象的父类 用super可以实现对父类成员的访问 访问父类被隐藏的成员变量 如 super variable 调用父类中被覆盖的方法 如 super Method paramlist 调用父类的构造函数 如 super paramlist super引用 关于类的继承及super关键字People1 javaStudent1 java注意 若使用super引用父类构造方法 则super必须放在第一句 final关键字 final修饰数据final可以修饰数据 对于基本数据类型 表示它的值一旦定义不可修改 对于引用数据类型 表示引用不可指向其他对象 但指向的对象本身内容可以被修改关于final修饰数据FinalData java final关键字 final修饰方法final修饰的方法在子类中不可以被覆盖 override final修饰类final修饰的类不能被继承 初始化及class装载 初始化及类装载的顺序是执行包含main方法的类 若发现该类有超类 则优先装载超类 多层继承关系时依次向上查找装载 装载类时 就执行其中的static部分 包括static变量和方法的初始化和static代码块 按照在类中定义的顺序 所有必要的类都装载完后 才可以创建对象 创建对象时 先为所有基本数据类型赋缺省值 所有引用数据类型赋为null 在调用构造方法 在本类构造方法中默认先调用父类构造方法 多层继承关系时依此类推 初始化及class装载 关于final修饰数据Cartoon javaBeetle java 类的多态性 什么是多态重载的条件和编译时多态性覆盖和运行时多态性 什么是多态 多态 polymorphism 即一个名字具有多种语义 在面向对象中指一个方法可以有多种实现版本 类的多态表现为方法的多态 方法的多态主要有重载 overload 和覆盖 override 重载是 同一个类 中 有多个方法同名 但是参数列表不同覆盖是子类中定义了父类同名方法 且参数列表和返回值类型相同 重载的条件和编译时多态性 同名方法构成重载的条件参数列表不同 包括参数的个数 类型 不同类型参数的顺序 方法的返回值不能构成重载的条件静态联编 静态多态性 它是Java的编译时特性 即在编译用户的程序代码时就将对某一方法的调用与对应的具体方法体相互联系起来 生成最终的程序代码同名的方法由于参数列表不同 在编译时就可以根据调用方法的形式确定到底执行哪个方法的代码 因此这种方法的同名是允许的 覆盖和运行时多态性 同名方法构成覆盖的条件方法分别在父 子类中定义同名除访问控制修饰符外其它通通一样运行时多态性它是Java的运行时的特性 即在编译用户的程序代码时不将对某一方法的调用与对应的具体方法体相互联系起来 而是在执行过程中依据对象的实际类型相应地生成对该对象所在类中的方法最终调用的程序代码 覆盖和运行时多态性 由于调用方法的引用可能指向父类或子类的对象 见上转型对象 因此可以根据 是谁的对象就调用谁的方法 的原则确定调用同名方法中的哪一个 因此在父 子类中定义同名 甚至参数列表相同的方法是允许的 当然 确定调用方法的引用指向父类还是子类的对象在编译时无法完成 只能在运行时确定 重载和覆盖 从方法声明角度 重载的两个函数参数列表不同 覆盖的两个方法参数列表和返回值相同从所处位置角度 重载的两个方法在同一类中 覆盖的两个方法在有继承关系的两个类中从方法调用角度 重载的方法被同一对象使用不同的参数调用 覆盖的方法被不同对象使用相同参数调用从联编时机角度 重载的方法在编译时联编 覆盖的方法在运行时联编 重载和覆盖 关于方法的重载和覆盖重载时返回值 参数名称和访问权限不起作用覆盖时参数列表相同则返回值必须相同覆盖时子类中方法的访问权限不能低于父类中同名方法的访问权限Over java 习题 习题1 面向对象特性 按如下要求设计类定义一个 曲调类 Note 包括value成员Note的三个子类分别表示高音 低音和中音定义一个 乐器类 Instrument 具有play 方法Instrumen

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论