已阅读5页,还剩61页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章 面向对象的程序设计概念 1 一 面向对象的基本概念 抽象 封装 继承 多态 面向对象程序设计的基本特征 2 对象与类 简单地说 对象是表示现实世界中某个具体的事物 类是对对象的抽象描述 3 对象 object 我们可以把生活所在的真实世界 RealWorld 当作是由许多大小不同的对象所组成的 对象可以是有生命的个体 比如一个人或一只鸟 4 对象 对象也可以是无生命的个体 比如一辆汽车或一台计算机 对象也可以是一件抽象的概念 如天气的变化或鼠标所产生的事件 5 对象 object 计算机世界中的对象是把数据及其相关的操作封装在一起所构成的实体 封装的实体 数据 方法 行为 数据 属性或状态方法 作用于数据上的操作封装 属性的访问和变化通过方法完成 6 对象的特征 对象有两个特征 状态 state 和行为 behavior 例如 一个人有他的身高或体重作状态 并有他的行为 如唱歌 打球 骑摩托车 开汽车 一只狗有它的颜色作状态 也有它的行为 如吠叫或跳跃 而在程序设计中 软件对象的概念由真实世界对象而来 对象的概念是面向对象软件对象将状态保存在变量 variables 或称数据字段 datafield 里 而行为则借助方法 methods 为工具来实现 7 软件对象的定义 我们可以对软件对象作以下的定义 定义 对象是由数据字段 变量 及相关方法所组成的软件包 8 汽车对象 以汽车为例 我们可定义其状态与方法如 通过换档 方法 改变当前档位 属性 当前档位 9 面向对象设计思想 1 抽象 是从特定的对象 实例 中抽取共同的性质以形成类 一般化概念 的过程 10 二 类 class 的概念 类 是一种抽象的数据类型 它是所有具有一定共性的对象的抽象 本质上可以认为是对对象的描述 使创建对象的 模板 类的某一个对象则被称为是类的一个实例 是类的实例化结果 实例化 抽象 11 类 class 在真实世界里 有许多同 种类 的对象 而这些同 种类 的对象可被归类为一个 类 例如我们可将世界上所有的汽车归类为汽车类 所有的动物归为动物类 12 实例 instance 汽车类有些共同的状态 汽缸排气量 排档数 颜色 轮胎数 和行为 换档 开灯 开冷气 但每一台汽车个别的状态及方法可不同于且独立于其他汽车 你的汽车只是这世界中许多汽车中的一个 我们就称你的汽车对象是汽车类中的一个实例 instance 13 方法 method 方法是对象的行为方式 操作 对象与外界的接口作用改变对象的属性返回对象的属性 object1 object2 14 面向对象方法的主要优点 与人类习惯的思维方法一致可重用性可扩展性可管理性 15 三 定义类 修饰符 class类名 extends父类 implements接口名 类成员变量声明 类方法声明 16 任务5 1 定义类 publicclassStudent Stringname intNo Stringdorm Stringtel voidcheckIn Stringa intb name a No b voidassignDorm Stringa dorm a voidprovideTel Stringb tel b 17 四 对象的定义 修饰符 类名对象名 new类名 实参列表 或 修饰符 类名对象名 对象名 new类名 实参列表 18 创建对象 类名对象名 Studentzhang 注意 类属于复合数据类型 因此 在声明对象时 系统并没有为对象分配空间 用户需要应用new完成分配空间的任务 zhang newStudent 与数组的对比性intscore score newint 10 合二为一 Studentzhang newStudent 19 对象的引用 引用成员变量对象名 成员变量名引用方法对象名 方法名 参数列表 20 5 1 2对象的生命周期 1 对象的生成2 对象的使用3 对象的清除 21 5 1 3由类的定义产生对象 22 任务5 2 使用Student类 publicclassTermBegins publicstaticvoidmain String args Studentzhang zhang newStudent zhang checkIn 张三 001 zhang assignDorm A 101 zhang provideTelSystem out println 姓名 zhang name System out println 学号 zhang No System out println 宿舍 zhang dorm System out println 联系电话 zhang tel 姓名 张三学号 1宿舍 A 101联系电话创建对象 23 演示 定义一个cube类 代表一个立方体包含的属性有 长 宽 高 分别保存在变量x y z里面方法有 求表面积求体积在main函数里定义一个cube类对象a 并设置立方体a的长宽高分别为3 4 5 并求出立方体a的表面积和体积打印出来 24 上机作业1 设计一个交通工具Vehicle 属性包括最大速度speed 颜色color 类别kind 方法包括设置速度 颜色 类别 取得速度 颜色 类别创建Vehicle对象 并为其设置新最大速度和颜色和类别 并显示其最大速度 颜色 类别 25 上机作业2 1 编写一个位置类Position 包含两个成员变量 横坐标x 纵坐标y 一个方法 printInfo 打印出横坐标和纵坐标 2 编写Position类的测试程序 创建一个点类的对象a 横坐标 纵坐标分别为3 4 要求输出点a的相关信息 26 举例 汽车的例子 packagech5 week2 publicclassCar intspeed Stringcolor Stringno voiddrive inta speed speed a voidprint System out println speed speed System out println color color System out println no no voidchangeColor StringaColor color aColor voidchangeNo StringaNo no aNo 27 packagech5 week2 publicclassCube 与main方法平行的地方写cube的属性和方法intx y z intarea inttmp 2 x y y z z x returntmp intvolumn inttmp x y z returntmp publicstaticvoidmain String args Cubeb1 newCube b1 x 3 b1 y 4 b1 z 5 System out println 表面积 b1 area System out println 体积 b1 volumn 举例 立方体的例子 28 packagech5 week2 publicclassDog intage Stringname floatweight booleanisHungry voidgrow age age 1 voideat floatfoodWeight weight weight foodWeight 举例 小狗的例子 29 测试各种类的程序 packagech5 week2 publicclasstest paramargs publicstaticvoidmain String args TODOAuto generatedmethodstub dog car CarmyCar newCar 组装新车myCar color red myCar no gz9090 myCar speed 0 myCar print 改装车myCar drive 40 myCar changeColor blue myCar changeNo 888888 myCar print CaryourCar newCar 组装新车yourCar color green yourCar no gz9091 yourCar speed 0 yourCar print 改装车yourCar drive 40 yourCar changeColor yellow yourCar changeNo 888886 yourCar print CarsheCar newCar CaraBoyCar sheCar Dogdog1 dog1 newDog dog1 name tom dog1 age 2 dog1 weight 2 dog1 eat 0 5f System out print dog1体重 dog1 weight Dogdog2 newDog dog2 name jack dog2 age 2 dog2 grow System out println dog2年龄 dog2 age 30 第三周课 31 5 1 4类的构造函数 任务5 3 为Student类定义构造方法 publicclassStudent Stringname intNo Stringdorm Stringtel Student StringaName intaNo name aName No aNo voidassignDorm Stringa dorm a voidprovideTel Stringb tel b publicstaticvoidmain String args Studentzhang newStudent 张三 001 zhang assignDorm A 101 zhang provideTel32 任务5 4 为Student类定义多个构造方法 源代码在备注中 33 5 2封装性 封装的定义包括下面几个方面 1 一个清晰的边界 所有对象的内部软件范围限定在这个边界之内 2 一个接口 该接口描述当前对象和其他对象之间的交互作用 3 内部实现 对象内部的实现是受保护的 这个实现给出了软件对象功能的细节 定义当前对象的类的外面不能访问这些实现细节 34 5 2 1类变量和类方法 35 对象的初始化 类中包含有成员变量和方法 当使用类声明并创建对象时 使用new关键字 这时系统为对象创建自己的内存区域并自动调用构造方法初始化成员变量 36 构造方法 构造方法是一个特殊的成员方法 它与类名相同 在创建对象空间后 系统自动根据参数调用相应的构造函数 构造函数的主要功能是为数据成员赋初值 37 构造方法的特点 构造方法名与类名相同 构造方法没有返回类型 也不是void 构造方法的主要作用是对类对象的初始化 如果没有定义构造方法时 成员变量将被初始化为各种类型的默认值 构造方法只能与new关键字初始化对象时使用 其他时候不能使用 一个类可以定义多个构造方法 根据参数的不同决定执行哪一个 38 publicclassStudent Stringname intNo Stringdorm Stringtel Student StringaName intaNo name aName No aNo voidassignDorm Stringa dorm a voidprovideTel Stringb tel b publicstaticvoidmain String args Studentzhang newStudent 张三 001 zhang assignDorm A 101 zhang provideTel任务5 3定义构造方法 构造方法作用 避免对象创建后没有任何内容 强制程序员在创建对象时就给某些变量一些初始值 39 任务5 4多个构造方法 Student StringaName intaNo name aName No aNo Student intaNo No aNo Student StringaName name aName 多个构造方法 为程序员提供多种选择 在创建对象时 可以任意使用其中一个 40 publicclassStudent Stringname intNo Stringdorm Stringtel Student StringaName intaNo name aName No aNo Student intaNo No aNo Student StringaName name aName voidassignDorm Stringa dorm a voidprovideTel Stringb tel b 任务5 4源代码 41 publicstaticvoidmain String args Studentzhang newStudent 张三 zhang assignDorm A 101 zhang provideTelSystem out println 姓名 zhang name System out println 学号 zhang No System out println 宿舍 zhang dorm System out println 联系电话 zhang tel System out println Studentli newStudent 002 li assignDorm A 102 li provideTelSystem out println 姓名 li name System out println 学号 li No System out println 宿舍 li dorm System out println 联系电话 li tel 任务5 4源代码 42 课后实训一 一 类的定义及使用 1 编写一个位置类Position 包含两个成员变量 横坐标x 纵坐标y 一个方法 printInfo 打印出横坐标和纵坐标 2 编写Position类的测试程序 创建一个点a 3 4 要求输出点a的相关信息 3 将Position类的的两个成员变量改为私有 并添加相应的set和get方法 用set方法为点a赋值为 5 7 用get方法取出a的坐标并打印出来 4 为Position类添加一个不带参数构造方法 将横坐标纵坐标初始化为原点 在测试程序中新增1个原点 5 为Position类添加一个带参数的构造方法 传两个参数用于初始化坐标 在测试程序中新增1个点b 8 9 6 为Position类添加一个静态变量TotalNum 用于统计创建的Position对象数 在测试程序中输出总的点数量 43 五 类成员变量的定义 定义 访问权限符 static final 类型变量名权限修饰符有 public protected和privatestatic 在成员变量前说明该变量是静态变量 final 在成员变量前说明该变量是一个最终变量 44 修饰符 static static可以修饰类中的属性和方法 静态属性在类定义时静态地分配空间 它属于类 不属于某个特定的对象 因此可以通过类进行访问 往往将属于类的公共属性说明成static 45 任务5 5 static成员变量 publicclassStudent Stringname intNo Stringdorm Stringtel staticintcount 0 Student StringaName intaNo name aName No aNo count Student intaNo No aNo Student StringaName name aName staticvoidprintCount System out println count publicstaticvoidmain String args Student printCount Studentzhang newStudent 张三 001 Studentli newStudent 李四 003 System out println Student count 46 Java实例 static方法 classSta method intwidth height 这两个变量没用到publicstaticdoublearea intwidth intheight returnwidth height publicstaticvoidmain Stringargs inti j doublef i Integer parseInt args 0 j Integer parseInt args 1 f area i j 直接引用此方法System out println Area i j f 47 静态方法 由于静态方法属于整个类 因此它不能处理属于某个对象的变量 只能处理属于整个类的变量 静态变量 静态方法中只能调用静态方法 48 static的访问规则 一个对象的方法可以访问对象的数据成员 也可以访问方法的局部变量一个类方法只能访问自己的局部变量或者类变量 49 static的访问规则 解决的办法 1 将变量改成类变量classStaticError staticStringmystring hello publicstaticvoidmain Stringargs System out println mystring 50 static的访问规则 2 访问局部变量classNoStaticError publicstaticvoidmain Stringargs Stringmystring hello System out println mystring 51 任务5 5 用static变量统计Student类对象个数 static变量和方法的使用publicclassStudent Stringname intNo Stringdorm Stringtel staticintcount 0 Student StringaName intaNo name aName No aNo count Student intaNo No aNo Student StringaName name aName staticvoidprintCount System out println 已报到人数 count publicstaticvoidmain String args Student printCount Studentzhang newStudent 张三 001 Studentli newStudent 李四 003 System out println Student count 已报到人数 0已报到人数 2 52 5 2 2使用private将变量封装起来 53 任务5 6 private修饰符让Student类的数据更安全 设置private变量publicclassStudent Stringname intNo Stringdorm Stringtel privatestaticintcount 0 Student StringaName intaNo name aName No aNo count staticvoidprintCount System out println 总人数 count publicclassuseStudent publicstaticvoidmain String args Studentzhang newStudent 张三 001 Studentli newStudent 李四 003 Student printCount 利用函数访问count变量 System out println Student count 上句有语法错误 Student私有变量count不能被访问 54 5 3扩展应用 5 3 1数组与对象 任务5 7 用数组处理多个学生对象 publicclassStudent Stringname intno intscore voidprintInfo System out println name t no t score publicclassuseStudent publicstaticvoidmain String args Student netClass newStudent 10 int score 90 67 78 90 65 45 67 89 76 67 String name susan tom jerry jack rose maggie elisha Dick Harry John for inti 0 i 9 i netClass i newStudent 为每个数组元素分配空间netClass i no i 1 netClass i name name i netClass i score score i System out println name t no t score for inti 0 i 9 i netClass i printInfo namenoscoresusan190tom267jerry378jack490rose565maggie645elisha767Dick889Harry976John1067 55 5 3 2对象作为方法的参数和返回值 任务5 8 输入和返回参数为学生类对象 publicclassStudent Stringname intno doublescore1 成绩1doublescore2 成绩2intsustainers 支持者publicStudent Stringname intno doublescore1 doublescore2 intsustainers super this name name this no no this score1 score1 this score2 score2 this sustainers sustainers 56 比较两个学生的信息 输出综合指数高的同学作为班长publicclassuseStudentPk staticStudentpk Studenta Studentb doubleaEx a score1 0 2 a score2 0 3 a sustainers 0 5 doublebEx b score1 0 2 b score2 0 3 b sustainers 0 5 if aEx bEx returna else returnb publicstaticvoidmain String args Studentzhang newStudent zhangsan 001 90 90 15 Studentli newStudent lisi 002 89 90 20 Studentwang newStudent wangwu 007 98 92 10 Studentzhao newStudent zhaoliu 012 89 70 25 Studenttmp pk zhang li Studentmonitor pk tmp wang monitor pk tmp zhao System out print 取胜者为 monitor name 取胜者为 lisi 57 5 3 3对象作为类的成员 publicclassCommunication doublemobliePhone 移动电话StringeMail 电子邮件doubleqq qq号码Stringtelephone 宿舍电话publicCommunication doublemobliePhone Stringmail doubleqq Stringtelephone super this mobliePhone mobliePhone this eMail mail this qq qq this telephone telephone publicclassStudent Stringname intno Communicationcom1 publicStudent Stringname intno Communicationcom1 super this name name this no no 1 com1 publicclassTestStudent publicstaticvoidmain String args Communicationcom newCommunication 1311115566 aa 123456 020 88888888 Studentzhang newStudent zhangsan 001 com 58 5 4习题 一 选择题1 以下说法不正确的是 A 类是同种对象的集合和抽象B 类是抽象的数据类型C 类是复合数据类型D 类是一个对象2 定义类的类头时可以使用的关键字是 A privateB protectedC finalD static3 下列选项中 用于在定义子类时声明父类名的关键字是 A interfaceB packageC extendsD class4 下列类头定义中 错误的是 A publicxextendsy B publicclassxextendsy C classxextendsyimplementsy1 D classx 59 5 设A为已定义的类名 下列声明A类的对象a的语句中 正确的是 A floatAa B publicAa A C Aa newint D staticAa newA 6 设A为已定义的类名 下列声明A类的对象a的语句中正确的是 A publicAa newA B publicAa A C Aa newclass D aA 7 设X Y均为已定义的类名 下列声明类X的对象x1的语句中正确的是 A publicXx1 newY B Xx1 X C Xx1 newX D intXx1 8 设i j为类X中定义的int型变量名 下列X类的构造函数中不正确的是 A voidX intk i k B X intk i k C X intm intn i m j n D X i 0 j 0 U1 U1 希望后面加一些填空题和简答题 以求和面得章节的统一 60 二 填空题 1 一个对象的三个生命周期是 2 使用一个对象前 必须声明并 它 3 创建类对象的运算符是 创建的目的是 4 通过类MyClass中的不含参数的构造函数 生成该类的一个对象obj 可通过以下语句实现 5 通过 运算符与类的对象连接 可以访问此类的成员 6 定义类就是定义一种抽象的 它是所有具有一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年湖南工商大学第二次公开招聘21人历年真题库带答案解析
- 2025贵州遵义市正安县面向“三支一扶”计划期满人员专项招聘乡镇事业单位人员招聘3人备考题库附答案解析
- 2025年永吉县总工会公开招聘工会社会工作者(6人)备考公基题库带答案解析
- 大通县2025年面向社会公开招聘森林草原专职消防员笔试模拟试卷附答案解析
- 2026泰安银行股份有限公司校园招聘70人历年真题汇编带答案解析
- 2025福建厦门市集美职业技术学校非在编教师招聘1人历年真题汇编附答案解析
- 2025广西北海市中日友谊中学秋季学期教师招聘2人笔试备考试卷附答案解析
- 2025河北廊坊市三河市公安局公开招聘警务辅助人员130人备考公基题库带答案解析
- 2025建信人寿保险股份有限公司滨州中心支公司招聘模拟试卷附答案解析
- 2025泉州银行宁德分行招聘历年真题汇编带答案解析
- 校园安全教育安排表
- 转炉维修安全培训课件
- 生产现场成本培训课件
- 汽车悬架课件
- DB61T 1244-2019 养老护理服务规范 认知障碍老年人照护
- 浙江省2025年初中学业水平考试英语试卷(含答案)
- 2025年人教版七年级英语上册 Unit4课时1SectionA(1a-pronunciation)分层作业(学生版+教师版)
- 计算机组装与维护试题库附带答案(总结全面)
- 专题10 铁、铜及其化合物(原卷版)【好题汇编】十年(2016-2025)高考化学真题分类汇编(全国通.用)
- 急性上呼吸道感染
- 剖宫产质量控制课件
评论
0/150
提交评论