面向对象特征讲解.ppt_第1页
面向对象特征讲解.ppt_第2页
面向对象特征讲解.ppt_第3页
面向对象特征讲解.ppt_第4页
面向对象特征讲解.ppt_第5页
免费预览已结束,剩余47页可下载查看

下载本文档

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

文档简介

1 第4讲面向对象特征 1 武汉大学国际软件学院 2 4 1基本概念 什么是编程语言 人和计算机进行交流的工具和手段编程语言的发展机器语言 0101001汇编语言 mov push add call第三代语言 高级语言 以C语言为代表 过程式编程语言 ProceduralProgrammingLanguage 第四代语言 非过程化 面向对象的编程语言语言的发展 抽象的过程 3 面向对象 ObjectOriented OO 面向对象编程 ObjectOrientedProgramming OOP 面向对象是一种软件开发的方法 面向对象的分析与设计 OOA OOD 研究生课程 第一个面向对象的语言 Simula 67第一个成功的面向对象编程语言 SmalltalkC JAVA C PERL等用客观世界中描述事物的方法来描述程序中要解决的问题万事万物都是对象程序便是成堆的对象 彼此通过消息的传递 请求其他对象进行工作 4 1基本概念 续 4 五个基本概念对象类封装性继承性多态性 4 1基本概念 续 5 对象 object everythingisanobject现实世界的对象 桌子 书 自行车 电视 狗 文件 表格 按钮 窗口对象包含两个特性状态 指对象本身的信息 内部信息 内部变量 行为 实现对信息的访问 对象的操作标志 代表对象的标识符山地车的状态 两个车轮 一些齿轮 速度 挡数 行为 刹车 加速 减速和换挡 书包含很多信息 拥有访问所包含信息的方法 一页一页的看 通过目录找到感兴趣的内容 4 1 1对象 6 对象 object 状态 变量 variables 行为 方法 method 对象就是变量和相关方法的软件集合一个对象可以由其他对象组合而成 窗口 按钮 菜单条 文本框 状态栏等 程序就是对象的集合 对象之间相互交互和通信完成任务搭积木Aprogramisabunchofobjectstellingeachotherwhattodobysendingmessages 4 1 1对象 续 7 类 class 亚里士多德 theclassoffishesandtheclassofbirds现实世界中 存在很多同类的对象 很多桌子 书 自行车一种原型 一种抽象 一种共性 一个模板Everyobjecthasatype实例 instance 某类对象的一个特定实体 类是对象的一个抽象表格 类 填入不同的个人信息 不同的对象 4 1 2类 8 封装性对象本身的数据得到保护 隐藏其他对象仅仅需要知道对该对象的访问方法 接口 interface 即可好处模块化 每个对象的源文件可以是相互独立的 可以被不同的程序调用 每个对象是一块积木 可以搭建不同的形状信息隐藏 通常定义一个公共接口 方法实现对对象的访问 可以调整对象的私有信息和方法 而不会对其他调用它的对象产生影响可重用性黑盒子电脑的DIY喷墨打印机 硒鼓坏 彩色硒鼓 4 1 3封装性 9 继承性为什么会有继承 建立一个类后 发现另一个新的类有相同的特性 两个选择 重新定义一个新的类 在已有类的基础上 修改 加加 减减 父类和子类 子类继承 拥有 父类所有的数据和方法 同时子类可以有新的数据和方法 青出于蓝 而胜于蓝 树型结构 层次化结构 根 基类 4 1 4继承性 10 继承性 运输工具 航空运输工具 陆地运输工具 水上运输工具 人力驱动 引擎驱动 二轮 四轮 客运 货运 4 1 4继承性 续 11 继承性多重继承 类A 类B 类C 类D 类F 类G 一个类拥有多个父类 产生二义性 例类C和类D都有一个同名的方法 类G Java中仅仅支持单一继承 同时Java采用Interface 接口 实现多重继承而避免父类二义性 4 1 4继承性 续 12 多态性表现在继承中 方法的重写子类从父类继承 extends扩展 而来多个子类同属一个父类 所有子类有相同的父类继承父类的方法在不同的子类中有不同的表现形式表现在用一个类中 方法的重载 4 1 5多态性 13 多态性多态性在继承中的表现 4 1 5多态性 续 14 多态性 classSquareextendsShape voiddraw System out println Square draw voiderase System out println Square erase classTriangleextendsShape voiddraw System out println Triangle draw voiderase System out println Triangle erase classShape voiddraw voiderase classCircleextendsShape voiddraw System out println Circle draw voiderase System out println Circle erase 4 1 5多态性 续 15 多态性 publicclassTest publicstaticShaperandShape switch int Math random 3 default case0 returnnewCircle case1 returnnewSquare case2 returnnewTriangle publicstaticvoidmain String args Shape s newShape 9 for inti 0 i s length i s i randShape for inti 0 i s length i s i draw Circle draw Triangle draw Circle draw Circle draw Circle draw Square draw Triangle draw Square draw Square draw 4 1 5多态性 续 16 程序是对象的集合 而对象是类的实例化源程序就是一个个的Java类Java本身提供的类 核心API 见Java文档中描述程序员可以对其进行调用j2sdk1 4 1 01 jre lib rt jar 22 4MB 程序员自己定义的类 4 2类 17 类的定义格式 类的修饰符 class类名 extends父类名 implements 接口名 类型成员变量1 类型成员变量2 类型成员方法1 参数1 参数2 方法体 类型成员方法2 参数1 参数2 方法体 4 2 1类的定义 18 类的定义格式 类的修饰符 class类名 extends父类名 implements接口名 类的修饰符public 公共类 可以被其他类所使用 declaresthattheclasscanbeusedbyanyclassregardlessofitspackage 无任何限制 无修饰 默认说明 aclasscanbeusedonlybyotherclassesinthesamepackage 仅仅能在同一个包中的其他类引用 abstract declaresthattheclasscannotbeinstantiated 宣布该类不能被实例化 final declaresthattheclasscannotbesubclassed 宣布该类不能有子类 4 2 2类的描述 19 类的修饰符final Declaresthattheclasscannotbesubclassed 宣布该类不能有子类 4 2 3类的修饰符 finalclassChessAlgorithm classBetterChessAlgorithmextendsChessAlgorithm Can tsubclassfinalclasses classChessAlgorithmclassBetterChessAlgorithmextendsChessAlgorithm 1error 20 类的定义格式 类的修饰符 class类名 extends父类名 implements接口名 extends 继承的关系implements 实现哪些接口 interface 的方法 实现多重继承publicclassTestextendsFrameimplementsActionListener ItemListener 4 2 4类的定义格式 21 一个简单的类classStudent Stringname stuNumber doublescore1 score2 score3 voidset1 Strings1 Strings2 name s1 stuNumber s2 System out println name stuNumber doublesetScore doubled1 doubled2 doubled3 doubled score1 d1 score2 d2 score3 d3 d d1 d2 d3 returnd 4 2 5一个简单的类 22 包 Package 的概念packageorg jalpha classtest 源文件位置 D src org jalpha test java 编译方法1 cdD src org jalpha javactest java 编译方法2 cdD src javacorg jalpha test java class文件位置 D src org jalpha test class 运行 cdD src javaorg jalpha test 4 3包 Package 的概念 23 包 Package 的概念通过包来管理类名空间防止同名类名的冲突层次化的结构 对个体 个人和机构 将类文件放在不同的目录下防止重名org jalpha method1 javamethod2 java ABC公司Engine java XYZ公司Engine java 需调用Engine java ABC公司com abc Engine java XYZ公司com xyz Engine java 24 包 Package 的概念packageorg jalpha classtest D src org jalpha test javaD src org jalpha test1 javaD src org jalpha test2 java 25 对象具有状态和行为成员变量定义 访问权限修饰符 类型变量名 访问权限修饰符 类型变量名 初值 访问权限修饰符 类型变量名 初值 变量名 初值 成员方法定义 访问权限修饰符 方法返回类型方法名 throws异常名 方法体 类型 基本类型 复合类型 数组 类和接口 类成员 26 访问控制修饰符公共访问控制符 public被所有类访问默认访问控制符被同一包中其他类访问私有访问控制符 private被该类自身访问保护访问控制符 protected该类自身 同一个包中的其他类 其他包中的子类访问私有保护访问控制符 privateprotected该类自身 所有子类访问 4 3 1访问控制修饰符 27 非访问控制修符静态变量static属于类的变量最终变量final值在程序的执行过程中不会改变易失变量volatile可能同时被多个线程所控制和修改 4 3 2非访问控制修符 28 public 公共变量 公共方法 容许全权访问 无任何限制 先构造对象 再访问 4 3 3public 公共变量 公共方法 classA publicintx publicvoidprint classB voidtest Aa newA a x 100 a print packageabc classA publicintx publicvoidprint packagexyz importabc A classB voidtest Aa newA a x 100 a print 直接访问公有变量x和公共方法print 29 private 私有变量 私有方法 仅能在其所定义的类中被访问 先构造对象 再访问 D javacA javaxhasprivateaccessinAa x 100 print hasprivateaccessinAa print 2errors 4 3 4private 私有变量 私有方法 classA privateintx privatevoidprint classB voidtest Aa newA a x 100 a print 30 protected 保护变量 保护方法 容许类本身 子类 有一定限制 以及同一个包中所有类访问 先构造对象 再访问 4 3 5protected 保护变量 保护方法 classA protectedintx protectedvoidprint classB voidtest Aa newA a x 100 a print packageabc classA protectedintx protectedvoidprint packagexyz importabc A classBextendsA voidtest Aa Bb a x 100 a print b x 100 b print illegal illegal legal legal 31 无修饰 友好变量 友好方法 容许类本身以及同一个包中所有类访问 4 3 6无修饰 友好变量 友好方法 classA intx voidprint classB voidtest Aa newA a x 100 a print packageabc classA intx voidprint packageabc classB voidtest Aa newA a x 100 a print 32 小结 指子类与父类不在同一个包中的情况 4 3 7小结 33 static 静态变量 静态方法 类的变量 方法 独立于类的对象 可以直接根据类名调用classS staticintA 12 B 34 staticvoidprint classTest publicstaticvoidmain Stringargs System out println A S A B S B S print 4 4类成员变量 34 static 静态变量 静态方法 classTest publicvoidprint intx System out println x publicstaticvoidmain Stringargs intx 3 print x D javacTest javaTest java 9 non staticmethodprint int cannotbereferencedfromastaticcontextprint x 1error classTest publicvoidprint intx System out println x publicstaticvoidmain Stringargs intx 3 Testt newTest t print x classTest publicstaticvoidprint intx System out println x publicstaticvoidmain Stringargs intx 3 print x static方法中仅仅可以调用其他static方法 4 4 1static 静态变量 静态方法 35 final变量 方法final变量 定义一个常数 即变量值不能改变finaldoubleAVOGADRO 6 022e23 final类 不能有子类final方法 方法不能被重写 overriding classChessAlgorithm finalvoidnextMove ChessPiecepieceMoved BoardLocationnewLocation 4 4 2final变量 方法 36 小结类 public abstract final 无修饰 private 类成员publicprotectedprivate无修饰staticfinal 4 4 3类成员变量小结 37 方法 对象行为的描述完成某种功能的程序块定义 访问权限修饰符 方法返回类型方法名 throws异常名 方法体 方法参数的传递变量的作用域方法的重载 overloading 重写 overriding 方法的递归调用 4 5类成员方法 38 访问控制修饰符公共访问控制符 public被所有类访问默认访问控制符被同一包中其他类访问私有访问控制符 private被该类自身访问保护访问控制符 protected该类自身 同一个包中的其他类 其他包中的子类访问私有保护访问控制符 privateprotected该类自身 所有子类访问 4 5 1类成员方法的访问 39 非访问控制修符静态方法static属于类的方法最终方法final不能被子类重新定义的方法抽象方法abstract只有方法说明 没有具体实现本地方法native以其他语言实现方法功能同步方法synchronized用于多线程程序中的协调和同步 4 5 2非访问控制修符 40 例 4 5 2成员方法调用 classTest publicstaticvoidmain Stringargs doubled product AreamyArea myArea newArea d product myArea product System out println myArea的面积是 d product classArea doublewidth height voidsetV doublew doubleh width w height h doubleproduct returnwidth height 41 方法参数 4 5 3PassbyValue 形参和实参 D javaParameter343423 注意1 类型匹配注意2 基本类型与复合类型参数传递的结果不同 PassbyValueInJavamethods argumentsarepassedbyvalue Wheninvoked themethodreceivesthevalueofthevariablepassedin Whentheargumentisofprimitivetype pass by valuemeansthatthemethodcannotchangeitsvalue Whentheargumentisofreferencetype pass by valuemeansthatthemethodcannotchangetheobjectreference butcaninvoketheobject smethodsandmodifytheaccessiblevariableswithintheobject 42 例 u 3 v 2 u 5 v 10 输出结果 3451112131415 43 变量的作用域 成员变量 局部变量 4 5 4变量的作用域 成员变量 局部变量 44 方法的重载 overload 方法名相同 但方法的参数不同方法描述方法名 标识符 参数类型方法返回值绝对值abs a intint绝对值abs a longlong绝对值abs a floatfloat绝对值abs a doubledouble publicstaticintabs inta publicstaticlongabs longa publicstaticfloatabs floata publicstaticdoubleabs doublea 4 5 5方法的重载 overload 45 方法的重写 overriding 子类重写父类的方法 4 5 6方法的重写 overriding classFather voiddisplay classSonextendsFather voiddisplay Fatherf newFather f display Sons newSon s display 46 4 5 7构造方法 创建对象 实例化对象 new例1 Applea newApple 创建对象 例2 Applea 对象的说明 a newApple 实例化对象 对象的实例化通过构造方法 constructor 来实现构造方法的名字与类名相同构造方法没有返回值构造方法可以有多个 构成方法的重载 overload 47 例 对象的实例化和初始化 输出结果 2020501020 4 5 7 1对象的实例化和初始化 48 再谈方法的重载 overload 4 5 7 2再谈方法的重载 overload classTree intheight Tree prt Plantingaseeding height 0 Tree inti prt CreatingnewTreethatis i feettall height i voidinfo prt Treeis height feetheight voidinfo Strings prt s Treeis height feetheight staticvoidprt Strings System out println s for inti 0 i 5 i Treet newTree i t info t info mytree newTree 49 默认构造方法例classAppl

温馨提示

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

评论

0/150

提交评论