




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java语言与JBuilder应用初步第三章面向对象语言 本章要点 类与对象成员变量与成员函数对象的初始化与构造函数类的封装性类的继承性类的多态性抽象类与抽象函数类的静态变量与静态函数 类与对象 Java中的类在Java程序中 类是由定义和主体构成的右图是Java中一个完整的类 类与对象 完整的类定义格式 publicabstractfinalclass类名extends父类名implements接口名 类的主体 类定义中 必需的部分是 class 关键字和类的名字 其它部分都是可选的 成员变量与成员函数 成员变量成员变量的完整定义形式如下 accessLevelstaticfinaltransientviolatiletypename其中用黑体字标的变量类型和变量名是必需项 其它都是可选项 成员变量与成员函数 成员变量name 成员变量名也是必需项 它的命名要求与普通变量名相同在一个类里 你不能定义两个相同名称的成员变量 但允许成员变量和成员函数起相同的名字 例如 publicclassCalculator publicdoublea b publicdoubleadd publicdoubleadd return a b 成员变量与成员函数 成员函数成员函数与类相似 是由函数定义和函数主体构成的 如下图所示 函数定义部分包括函数的访问级 返回值的类型 函数名称和参数列表函数主体是花括号里的部分 它包括实现函数功能所需要的代码 成员变量与成员函数 成员函数能否在函数中改变参数的值publicclassTestSum publicvoidSum doublesumx doublex sumx sumx x publicstaticvoidmain String args TestSumaTest newTestSum doublesumx x sumx 0 x 3 aTest Sum sumx x System out println 累加结果为 sumx 成员变量与成员函数 成员函数publicclassTestStr publicvoidChangeString StringBufferOldStr StringBufferNewStr OldStr append NewStr publicstaticvoidmain String args TestStraStr newTestStr StringBufferStr1 newStringBuffer 新年 StringBufferStr2 newStringBuffer 快乐 aStr ChangeString Str1 Str2 System out println Str1 成员变量与成员函数 成员函数这种情况常出现于对象的构造函数中 publicclassCircle publicintx y radius publicCircle intx inty intradius this x x 构造函数的作用是为对象设定初值 因此函数的参数难免与成员变量重名 此时通过 this 就可以毫不费力地对二者进行区分 成员变量与成员函数 成员函数一个函数只能有一个返回值 publicdoubleSum doublex1 doublex2 doublesumx sumx x1 x2 returnsumx 函数地返回值可以赋给变量 doubley y Sum 5 3 成员变量与成员函数 成员函数对于带返回值的函数 Java语言要求从程序结构上保证函数一定可以返回一个值为便于理解 考虑下面的例子 publicintTest if 7 5 return1 很明显 7 5 永远成立 因此 return1 语句一定会被执行 函数一定有返回值但这段程序在编译时不能通过 成员变量与成员函数 成员函数成员函数内可以有 this super 对象 它们分别特指函数所属对象本身和它的父类 成员变量与成员函数 成员函数函数定义的完整形式 其中黑体字的部分为必需项 accessLevelstaticabstractfinalnativesynchronizedreturnTypemethodName paramList throwsexceptions 对象的初始化与构造函数 成员变量的初始化对象的成员变量是自动初始化的当用new关键字来产生一个对象时 对象的所有成员变量都自动初始化 DemoClassaDemo newDemoClass 初始化的结果 整型 浮点型变量赋值为0字符型赋值为空逻辑型赋值为false引用变量赋值为空 不指向任何一个对象 对象的初始化与构造函数 构造函数构造函数是一类特殊的成员函数 它的函数名与类名相同 没有返回值 也不用将返回值类型设为void如果一个类有构造函数 在构造这个类的时候 将会自动调用构造函数可以在构造函数中对指定的变量赋初值 与直接赋初值相比 构造函数灵活许多 并且不受变量先后次序的影响 对象的初始化与构造函数 构造函数一个类可以同时拥有几个构造函数 每个构造函数的自变量不同 初始化对象时根据自变量的不同自动选择合适的构造函数例题 源代码见教材 该例题中有三个构造函数 publicTree publicTree doubleHeight publicTree intAge 类的封装性 封装性与访问级控制类的一个优势在于类可以保护它的成员变量和成员函数不会被其它对象随意访问到在Java程序里 可以为成员变量和函数设定四级访问级 privateprotectedpublicpackage 类的继承性 类的继承的概念一个类可以从另一个类中继承它的成员变量和函数 前者称为子类 后者称为父类 类的这种特点称为继承性类的继承通过extends关键字来说明 extends关键字跟在类名称后面 形式如下 classClassNameextendsFatherClassName 其中ClassName是子类名 FatherClassName是父类名 类的继承性 类的继承性的特点在Java中 一个类只能有一个父类Java只支持单继承 而不支持多重继承如果需要多重继承 Java提供了一种接口技术 可以部分地实现多重继承的功能 类的继承性 类的继承性的特点在Java中定义的所有类都直接或间接地是Object类的子类 以Object类为根 所有Java类形成一棵类继承树 如下图所示 类的继承性 类的继承性的特点子类可以继承的部分 1 父类中公开级的成员 2 父类中保护级的成员 3 如果子类和父类在同一个包里 则子类继承父类中缺省的包访问级的成员 子类不能继承的部分 1 父类中私有级的成员 2 如果不在同一个包里 则缺省级的成员 3 同名的成员函数或成员变量 类的继承性 继承中的构造函数构造函数是比较特殊的一类在继承时 构造函数不会被继承 也不会被覆盖父类和子类的构造函数依然是独立存在 并且分别发挥着作用 类的继承性 classDrawing Drawing System out println Drawingconstructor publicclassCartoonextendsDrawing Cartoon System out println Cartoonconstructor publicstaticvoidmain String args Cartoonx newCartoon 类的继承性 classBoardGame BoardGame inti System out println BoardGameconstructor publicclassChessextendsBoardGame Chess super 11 System out println Chessconstructor publicstaticvoidmain String args Chessx newChess 类的多态性 多态性的作用数据抽象 继承性和多态性是面向对象编程思想的基本特性多态性将函数的功能与实现分开 也就是说 将 做什么 与 怎样做 分开了 类的多态性 成员的覆盖在类的继承中 除了继承来的父类成员外 子类也可以有自己的成员如果子类的某个成员变量或成员函数与父类的同名 子类的成员函数或成员变量将隐藏父类的同名成员 这称为成员的覆盖 classSuper intaNumber 10 classSubbieextendsSuper doubleaNumber 2 87 类的多态性 成员的覆盖例 BoardGame及其子类的Play函数 classBoardGame publicvoidPlay System out println Playaboardgame publicclassChessextendsBoardGame publicvoidPlay System out println Playachess 类的多态性 类的多态性如果用父类的变量指向子类 再调用同名的函数 会出现什么情况呢 BoardGameaBoard newChess aBoard Play 运行程序 显示的结果是 Playachess 可见 父类的变量指向子类对象 在调用函数时 实际调用的仍然是子类的函数 这就是类的多态性 类的多态性 类的多态性这种调用过程称为 后期绑定 前面涉及到的函数调用都是 前期绑定 编译时就根据变量类型定好了所调用的函数后期绑定是在执行的时候 再根据变量实际指向的对象类型 不是变量本身的类型 来决定所调用的函数利用后期绑定 一个函数调用语句可能不同类型的函数 这种现象就是多态性 类的多态性 函数的重载重载是指一个类的多个成员函数具有相同的名称 但有不同的参数 类的多态性 publicvoidAdd Complexx1 Complexx2 realPart x1 realPart x2 realPart imagPart x1 imagPart x2 imagPart publicvoidAdd Complexx1 doublex2 realPart x1 realPart x2 imagPart x1 imagPart publicvoidAdd doublex1 Complexx2 realPart x1 x2 realPart imagPart x2 imagPart publicvoidAdd doublex1 doublex2 realPart x1 x2 imagPart 0 类的多态性 覆盖 多态性与重载的区别重载 一个类中有多个函数有相同的名字 但参数不同 严格地说是参数类型列表不同 在调用这些函数时 Java根据调用时给出的参数自动选择适当的函数可以认为 在Java里 两个函数名相同 不代表两个函数相同 只有函数名和参数都相同的时候才是 真正 相同 类的多态性 覆盖 多态性与重载的区别覆盖和多态性就涉及到 真正 相同的函数之间的关系覆盖 如果父类和子类的函数相同 当你通过子类调用函数时 你所调用的就只是子类的函数 父类的函数被覆盖了多态性 反过来 当你通过父类调用函数时 如果变量所指向的是一个子类对象 那么所调的仍然是子类函数 这就是多态性 抽象类与抽象函数 抽象函数和抽象类的概念抽象函数 仅有定义 没有具体实现的函数抽象类 含有抽象函数的类定义一个抽象类 需要在类的定义前面加上 abstract 关键字定义一个抽象函数 需要在函数定义的前面加上 abstract 关键字一个类如果被定义为抽象类 它就不能实例化 也就是说 不能有自己的对象 抽象类与抽象函数 抽象类的使用抽象化的Game类 publicabstractclassGame publicabstractvoidPlay publicabstractStringGetRule 可以定义抽象类的变量 但不能创建对象 GamemyGame 抽象类变量可以指向Game的子类 再利用多态性来调用子类的Play或GetRule函数 抽象类与抽象函数 抽象类的使用抽象函数的意义是没有具体实现的函数它的作用就是被子类的相同函数覆盖 或通过多态性指向子类的相同函数通过抽象函数 可以定义一整套完整的函数功能 再派生出若干子类来实现不同的子类可以以不同的形式实现这些功能 但函数形式是完全一致的抽象类必须有子类 不然就没有意义 抽象类与抽象函数 抽象类的使用抽象类中不仅仅有抽象函数 也可以有普通的成员函数和成员变量但如果一个类中有抽象函数 那么这个类必须定义为抽象类如果一个类继承了父类的几个抽象函数 但没有全部实现 如BoardGame类 那么这个类也必须定义为抽象类 类的静态变量与静态函数 静态变量的概念静态变量 又称为类变量 是与对象的成员变量相对的一种变量静态变量不属于具体的对象 系统只为每个类分配一套类变量 而不管这个类产生了多少实例对象静态变量用 static 关键字定义 所有的对象共享一套静态变量 类的静态变量与静态函数 静态变量的使用例题 TestClass类 classTestClass publicstaticinttestStatic 有两种方法访问静态变量testStatic 通过对象访问或用类直接访问 TestClassaTest1 newTestClass TestClassaTest2 newTestClass aTest1 testStatic 12 aTest2 testStatic 5 TestClass testStatic 7 类的静态变量与静态函数 静态函数的概念实例函数 只能通过对象调用 每个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设备验收项目管理制度
- 2025年中国加固镜头行业市场全景分析及前景机遇研判报告
- 2025年中国基因编辑行业市场全景分析及前景机遇研判报告
- 评审签发规章管理制度
- 诊所病历处方管理制度
- 诊疗机构连锁管理制度
- 财政票据核销管理制度
- 货代公司销售管理制度
- 货物应急响应管理制度
- 货车卸货安全管理制度
- 传染病知识培训课件
- 人教版二年级数学下册期末测试卷(5篇)
- 2025年湖南融通资源循环产业有限公司技能岗位招聘题库带答案分析
- 车辆收费及管理制度
- 新能源汽车全生命周期碳足迹测算模型及减排策略
- T/CAS 612-2022碳中和管理体系要求
- 2025-2030中国显微镜行业市场深度调研及发展趋势与投资战略研究报告
- 平台合伙人合同协议书
- 运维安全保密措施
- 粮食加工消防安全管理规定
- 《智能驾驶技术解析》课件
评论
0/150
提交评论