




已阅读5页,还剩58页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java程序设计基础 第4章Java类与对象 面向对象技术是当今最热门的一项技术 是一种运用对象 类 继承 封装和多态性等概念来构造系统软件的开发方法 面向对象是Java的重要特性之一 Java是一种纯的面向对象的程序设计语言 本章从面向对象基本概念着手 介绍了对象 类 面向对象系统的四大特性 并详细介绍了类的创建 类的继承以及对象的创建和撤消 4 1基本概念 4 1 1对象和类1 对象 object 在现实世界中 任何事物都可以被看作是对象 这些现实生活中的对象都有两个共同的特点 它们都有自己的状态和属性 这些状态和属性可用一些数据来表示 它们都有自己的行为或操作 能改变状态 4 1基本概念 把现实世界中的对象进行抽象化和模型化 就产生了面向对象技术中的对象概念 它们同样具有状态和行为 面向对象技术中的对象是由描述该对象属性的数据以及可以对这些数据施加的所有行为封装在一起构成的统一体 通常把数据称为属性 Java中也称为成员变量 把行为称为方法 Java中也称为成员函数 4 1 1对象和类 2 类 Class 不同的对象常常有相同的特征 在面向对象技术中 同样可以为同一类对象创建一个模板 然后利用这个模板来创建许多的对象 类是对具有相同数据和相同行为的一组相似对象的定义 类定义了对象的属性和用于控制对象行为的方法 对象由类而来 类是创建对象的模板 对象是类的实体 Instance 一种类可以有许多个对象实体 4 1 1对象和类 3 面向对象技术四个要点 1 面向对象的软件系统是由对象组成的 软件中的任何元素都是对象 2 把所有对象都划分成各种对象类 简称为类 Class 每个对象类都定义了一组数据和方法 数据用于表示对象的静态属性 方法是允许施加于该类对象上的操作 3 按照子类和父类的的关系 把若干个对象类组成一个层次结构的系统 在这种层次结构中 通常下层的派生类具有和上层的基类相同的特性 这种现象称为继承 4 对象彼此之间仅能通过传递消息互相联系 4 1 2面向对象系统的主要特性 面向对象系统的四个主要特性是 抽象 继承 封装和多态性 1 抽象抽象是抽出事物的本质特性而暂时不考虑它们的细节 抽象用于标识一个特定应用程序所涉及的对象 Java为了更好地支持分层抽象的程序设计方法 引入了抽象类和抽象方法 抽象类可以包含抽象方法 但没有实现方法 一般它只能作为其它类的超类 4 1 2面向对象系统的主要特性 2 继承在面向对象的技术中 继承 Inheritance 是自动地共享类 子类和对象中的方法和数据的机制 它能够直接获得已有的性质和特征 而不必重复定义它们 Java只支持单一的继承 这大大降低了复杂度 在Java中不支持多重继承 但它引入了接口的概念 从程序设计的角度来看 接口和单重继承的结合使用可以实现多重继承的主要功能 4 1 2面向对象系统的主要特性 3 封装封装 Encapsulation 是一种信息隐蔽技术 它将代码和代码所操作的数据结合在一起 并防止外部的干扰和误用 用户只能见到对象封装界面上的信息 而对象内部的信息对用户来讲是隐蔽的 在面向对象的设计中使用同一原则以封装每一个对象的属性和方法 只有对象的某些方法是可以被外界使用的 而方法的实现是不可见的 封装通过隐藏类内对象的内部实现来帮助抽象 然后使用对象 而不必理解对象的类是如何实现的 通过对象封装 实现了模块化和信息隐藏 4 1 2面向对象系统的主要特性 4 多态性在希腊语中 多态 Polymorphism 指多种形态 两个或多个类可以有名字相同 基本目的相同 但实现方式不同的行为 这就是多态性 Java通过方法重载来实现多态 一个类中可以有多个具有相同名字的方法 由传递给它们的不同的个数和类型的参数来确定使用哪种方法 4 2类的创建 类是Java的核心 是形成Java面向对象程序设计的基础 Java中类定义的一般形式如下 类修饰符 class类名 extends超类名 implements接口名 类成员变量声明 类方法声明 4 2类的创建 类定义包括两部分工作 类的声明 主要定义类的名称 超类名 类中实现的接口和访问权限等关于类的一般信息 类体 主要定义类的成员变量和方法 是类功能的具体实现 4 2 1类的声明 类定义中的第一行就是类的声明 类声明中必须包括关键字class 类名及其类的属性 类名必须是合法的Java标识符 类属性是一些修饰的关键字 用来说明类的超类 实现接口和访问权限 4 2 1类的声明 1 说明类的超类在Java中 有一个根类Object 其它的类都是直接或间接从它派生出来的 如果想定义Object的直接子类 可以省略extends子句 编译器会自动包含它 显式指明类的超类的方法是使用由关键字extends和超类名组成的子句 extends超类名 4 2 1类的声明 例如 将Square类的超类说明为Rectangle类 则类说明如下 classSquareextendsRectangle 类体 此例说明了Rectangle类是Square的超类或父类 Square类是Rectangle的子类或继承类 4 2 1类的声明 2 说明在类中实现的接口在声明类时 可以指定类实现的接口 接口定义了一组方法和常量 但没有具体地实现它所定义的方法 当类声明实现接口时 类将具体地实现接口中所声明的方法 用关键字implements和接口名表所组成的implements子句说明类实现的接口 implements接口名 4 2 1类的声明 例如 定义一个接口ShapeInterface 包括两个方法brush paint 用Shape类可以声明ShapeInterface接口并实现它 4 2 1类的声明 publicinterfaceShapeInterface voidbrush voidpaint classShapeimplementsShapeInterface voidbrush 方法体 voidpaint 方法体 4 2 1类的声明 3 说明类修饰符类的修饰符用来说明类的性质 主要有3类 访问控制符 final和abstract 1 访问控制符访问控制符规定了其它类与当前类之间的访问关系 Java中类的访问控制符有public和private两个 在类说明中 习惯把关键字public或private放在final或abstract前面 4 2 1类的声明 2 finalfinal修饰符说明类是最终类 当这个类被声明为最终类时 它不能再有子类 例 下面代码说明endclass是一个最终类 finalclassendclassextendssuperclassimplementsinterfac 类体 4 2 1类的声明 3 abstractabstract修饰符说明类为抽象类 抽象类可以包含抽象方法 没有方法的具体实现 本身不具备实际功能 只能作为超类 用于衍生出子类 一个类不能同时声明为抽象类和最终类 即abstract和final不能合用 例 下面代码定义了类show为抽象类 abstractclassshowimplementsshowinterface 类体 4 2 2类的成员变量声明 类的定义有类的声明和类体两部分组成 类体又包括成员变量声明和方法声明 Java中类的成员变量声明一般形式如下 修饰符 变量类型变量名 变量初值 变量类型和变量名是成员变量声明中必不可少的部分 变量名遵循Java对标识符的规定 变量类型可以是简单的数据类型 也可以是复杂的数据类型 如类 class 成员变量属性由修饰符来限定 Java中成员变量修饰符包括访问控制符和其它修饰符 4 2 2类的成员变量声明 1 访问控制符成员变量的访问控制符用来限定变量的访问权限和可见性 共有5种 friendly public private protected privateprotected friendly 默认的访问控制符 它修饰的变量在本包中是可见的 在其它包中由本类扩展出的子类也是可见的 public 可被所有其它类引用 private 私有成员变量 只能被该类自身访问和修改 不能被其它类 包括该类的子类引用 protected 此类成员变量可被3种类引用 该类本身 与它在同一包中的其它类以及在其它包中该类的子类 privateprotected 可被两种类访问和引用 该类本身以及该类的所有子类 4 2 2类的成员变量声明 4 2 2类成员变量声明 2 其它修饰符其它的修饰符有static final和volatile static 此关键字修饰的成员变量称为静态变量或类变量 它们不属于任何一个类的具体对象 而为该类的所有对象共有 final 此关键字用来修饰常量 通常常量声明为static型 volatile 此关键字修饰的成员变量可能同时被多个线程所控制和修改 通常它用来修饰接受外部输入的变量 4 2 3类方法的定义 方法的定义与实现分为两部分 方法声明和方法体 类方法 又称为成员函数 Java中类方法的定义一般形式如下 修饰符 返回值类型方法名 参数列表 局部变量声明 方法体语句序列 4 2 3类方法的定义 在方法的声明中 应包括方法名 返回值类型 参数列表及修饰符信息 返回值类型和参数列表用来规定该方法与调用它的程序段之间的具体交互方式 如果方法无返回值 则声明为void类型 方法修饰符用来说明 限制当前方法的使用范围和它的有关属性 它与类成员变量修饰符类似 也可分为访问控制符和其它修饰符两大类 4 2 3类方法的定义 1 访问控制符访问控制符共有4种 friendly public private和protected friendly 是默认的访问控制符 该类本身的其它方法以及与该类在同一包中的其它类的方法都可以调用这个方法 public 此修饰的方法可以被所有的类调用 private 此修饰的方法仅能被当前类自身的方法所调用 而不能被其它任何类的方法所调用 protected 此修饰的方法可以被当前类或当前类的子类中的方法调用 4 2 3类方法的定义 2 其它修饰符其它5种修饰符有 static final abstract native和synchronized static 此修饰的方法属于整个类的方法 它在内存中的代码段将随着类的定义而分配和装载 不被任何有关对象专用 final 此修饰的方法是功能和内部语句不能修改的最终方法 即不能被当前类的子类重载的方法 4 2 3类方法的定义 例 下面代码声明方法method 为最终类 所以B类中的方法不能覆盖它 classA finalvoidmethod System out println Thisisafinalmethod classBextendsA voidmethod B类中的方法不能覆盖A类中的方法 System out println Illegal 4 2 3类方法的定义 abstract 此修饰的方法是一种只有方法头 而无具体方法体和操作实现的抽象方法 native 此修饰的方法一般用来声明用其它语言编写的方法体 并具体实现方法功能的特殊方法 synchronized 此修饰符主要用于多线程程序中的协调和同步 4 2类的创建 例4 1 在stack类中定义一个push 方法和一个pop 方法 classstack publicvoidpush intitem if top stack length 1 System out println Stackisfull else stack top item System out print stack top publicvoidpop intx 0 if top 0 System out println Stackunderflow else x stack top System out print x 4 2类的创建 例4 2 在doFibonacci类中定义了一个计算斐波那契 Fibonacci 数列的方法 Fibonacci数列的计算公式为 Fib0 1Fib1 1Fibn Fibn 1 Fibn 2 n 1 classdoFibonacci intfib intn if n 1 return1 elseif n 1 return1 elsereturnfib n 1 fib n 2 4 2类的创建 例4 3定义两个类 其中在sample类中定义两个方法 在另一个执行类中创建sample类的对象s 并输出计算结果 importjava io publicclasssample 构造函数定义publicsample inti intresult test i System out println i System out println result protectedinttest inta return a 4 2类的创建 classdoSample publicstaticvoidmain Stringargs samples newsample 3 System out println Thisisaresult 等待用户输入一个字符 以使输出窗口不关闭 从而可以观察运行结果 intr 1 try r System in read catch IOExceptione System err println Exception 4 2类的创建 4 3对象的创建和撤消 4 3 1对象的创建创建对象的一般形式如下 classname变量名 newclassname 参数表 说明 new操作用来实例化一个新的class对象 并为之分配内存 new只需要一个参数 该参数就是对一个构造方法的调用 4 3 1对象的创建 创建对象例子 samples newsample 3 这里创建了一个新对象s 通过类sample的构造函数进行初始化 新创建的对象是通过构造函数来初始化的 Java中 类的构造函数与类同名 从语法角度上看 它与方法相同 一旦定义了构造函数 在对象被创建时 自动调用构造函数 4 3 1对象的创建 例4 4 定义一个Rectangle类 再定义另一个makeRectangle类来创建一个矩形对象 并在屏幕上显示出来 importjava io publicclassRectangle protectedintwidth height protectedintarea publicRectangle intw inth width w height h area GetArea w h System out print Thisareais area 4 3 1对象的创建 protectedintGetArea intw inth intarea area w h returnarea publicvoiddrawRectangle for inti height i 0 i for intj width j 0 j System out print System out println 4 3 1对象的创建 classmakeRectangle publicstaticvoidmain Stringargs Rectanglerect newRectangle 5 4 rect drawRectangle intr 1 try w System in read catch IOExceptione System err println Exception 4 3 1对象的创建 4 3 2对象的撤消 当程序中创建的对象不再有用时 应该回收它 Java中创建对象所执行的方法是构造函数 撤消对象并回收它时执行的方法是finalize 方法 当对象的终止发生后 系统的垃圾收集器自动完成对对象的回收 例 protectedvoidfinalize System out println Anobjecthasbeenfree 4 3 3常用的特殊量 在Java中 系统默认每个类都具有以下三个特殊量 null this和super 任何类都可以不加说明地直接使用它们 null null代表尚未存在的对象 this this表示的是当前对象本身 更确切地说 this代表了当前对象的一个引用 super super表示当前对象的父类对象 是对当前对象的父类对象的引用 4 4类的继承 继承是面向对象程序设计方法中的一大特性 继承实际上是面向对象程序中两个类之间的一种关系 Java语言中的继承是通过extends关键字来实现的 在声明类时使用extends关键字指明新声明类的超类 这就在两个类之间建立了继承关系 4 4 1成员变量的继承和隐藏 子类继承它的超类中所有可被子类访问的成员变量 也就是说 1 子类继承那些声明为public或protected的成员变量 2 子类继承那些没有访问控制符的成员变量 只需子类和超类在同一包中 3 不能继承private成员变量 如果子类定义与超类同名的成员变量 即子类对超类继承来的成员变量重新定义 则称为成员变量隐藏 4 4 1成员变量的继承和隐藏 例4 5 下面是一个成员变量继承的例子 importjava io classBox doublewidth doubleheight doubledepth Box doublew doubleh doubled width w height h depth d 4 4 1成员变量的继承和隐藏 Box width 1 height 1 depth 1 Box doublelen width height depth len doublevolume returnwidth height depth 4 4 1成员变量的继承和隐藏 classBoxWeightextendsBox doubleweight BoxWeight doublew doubleh doubled doublem width w height h depth d weight m 4 4 1成员变量的继承和隐藏 classInheritDemo publicstaticvoidmain Stringargs BoxWeightmybox newBoxWeight 10 20 25 36 5 doublevol vol mybox volumn System out println Volumnofmyboxis vol System out println Qulityofmyboxis mybox weight intr 0 try r System in read catch IOExceptione 4 4 1成员变量的继承和隐藏 4 4 2方法的继承和覆盖 子类继承超类中可被子类访问的所有方法 也就是说 1 子类继承那些声明为public或protected的方法 2 子类继承那些没有访问控制符的方法 只需子类和超类在同一包中 3 不能继承private方法 子类可以重新定义与超类同名的方法 实现对超类方法的覆盖 覆盖的方法和超类中被覆盖的方法具有相同的名字 相同的参数和相同的返回类型 4 4 2方法的继承和覆盖 在进行方法覆盖时 应注意以下几点 1 子类不能覆盖超类中声明为final的方法 2 子类不能覆盖超类中声明为static的方法 3 子类必须覆盖超类中声明为abstract的方法 或者子类也声明为abstract型 4 4 2方法的继承和覆盖 例4 6 在超类中声明了area 方法是抽象的方法 所有从Figure类中继承下来的子类必须覆盖area 方法 importjava io abstractclassFigure doubledim1 doubledim2 Figure doublea doubleb dim1 a dim2 b abstractdoublearea 4 4 2方法的继承和覆盖 classRectangleextendsFigure Rectangle doublea doubleb super a b doublearea System out println InsideAreaforRectangle returndim1 dim2 4 4 2方法的继承和覆盖 classTriangleextendsFigure Triangle doublea doubleb super a b doublearea System out println InsideAreaforTriangle returndim1 dim2 2 4 4 2方法的继承和覆盖 classAbstractArea publicstaticvoidmain Stringargs Rectangler Rectangle 8 6 Triangles Triangle 8 10 Figurefigre figre r System out println Rectangle sareais figre area figre s System out println Triangle sareais figre area intw 1 try w System in read catch IOExceptione Systyem err printl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑方案设计概况范文大全
- 水电咨询年会策划方案
- 国潮产品活动策划方案
- 读书交流咨询活动方案
- 餐饮四月营销活动方案
- 建筑线描教学方案设计
- 咨询询价方案模板
- 宁化府营销策划书
- 纳兰直营店店长岗位职责
- 建筑定点服务方案设计流程
- 佛教协会会议室管理制度
- 人教版PEP六年级英语上册Unit-1-单元练习题及答案
- 传音控股在线测评题
- 2006WHO儿童身高体重参考值及评价标准
- (新版)初级磨工职业鉴定考试题库(含答案)
- JT-T-496-2018公路地下通信管道高密度聚乙烯硅芯塑料管
- JCT 2387-2024《改性聚苯乙烯泡沫复合装饰制品》
- 发电厂发电机原理与结构
- 人才服务可行性方案
- 抗旱防涝知识培训课件
- (高清版)DZT 0004-2015 重力调查技术规范(150 000)
评论
0/150
提交评论