




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章 形形色色的对象类型Java中的类,9.1 作为类型的类 9.2 类中类嵌套类 9.3 抽象类 9.4 接口 9.5 如何使用Java类库 9.6 小结 9.7 习题,9.1 作为类型的类,9.1.1 类作为方法的参数和返回类型 9.1.2 对象的数组,9.1.1 类作为方法的参数和返回类型,类作为这两种形式的变量出现的时候,跟基本类型变量不同的是,在这两个过程中,都是以引用来传递的。这些引用都是指向对象的一个实例,即最初作为参数传递给方法的那个对象实例。 下面我们来看一个例子,在例子当中定义了Complex复数类和一个以Complex类为参数和返回类型的方法modify()。 图9.1 示例程序中对象与引用的变化过程 图9.1,9.1.2 对象的数组,在介绍了Java中的方法定义和调用之后,还没有给大家介绍过方法返回数组的用法。先来看一下语法吧: 数组类型 方法名称( 参数类型1 参数1, 参数类型2 参数2, ) 图9.2中显示的是一个Complex对象的数组例子。从这幅图中可以看到数组中的每个元素都是一个引用,这些引用指向内存当中的对象实例。当然了,这些实例可以是相同的哦!,9.2 类中类嵌套类,9.2.1 认识嵌套类 9.2.2 嵌套类的关系,9.2.1 认识嵌套类,所谓嵌套类,就是指在类中定义的类。由于类在Java中也被当作一般的类型来对待,而在类中是可以定义各种类型变量的,自然也包括对象和它对应类的定义。 所谓的嵌套类其实并不复杂,只是在一个类当中再定义一个类而已。这个在外面定义的类称为外部类,嵌套在里面的类称为内部类。内部类作为外部类的一个成员存在,虽然它本身也是一个类,但对于外部类而言,它只是外部类的一个成员。内部类的定义除了它是一个类之外,其它规则和类内部成员完全相同。,9.2.2 嵌套类的关系,嵌套类的两个类之间与普通的类关系都不相同,既非平等的两个类,也不是继承关系,所以这两个类间的内部变量访问与方法的调用权限控制也和普通的情况有所不同。在这一小节里我们主要给大家介绍这个关系,开始可能觉得不太好理解,这没关系啦,结合后面的例子和运行结果相信大家会弄明白的! 先给大家介绍比较容易理解的情况,在嵌套类中,内部类是属于外部类的一部分。对于外部类而言,内部类完全属于它。这里说的完全属于是指内部类的一切属性和方法都跟外部类自己的一样。在外部类当中,可以随意地访问内部类的任何权限的属性,包括private声明的属性。对于内部类的方法也是一样,外部类完全不受权限控制,可以任意访问它们。,我们将从外面访问嵌套类中属性和方法的情况画在了下图当中。从图中可以看到,外部类中自然是public类型的可以被外面直接访问到。对于内部类,必须是public型的内部类对象中的public型属性和方法才能从外面直接访问到。访问的形式为: 外部类对象名.内部类对象名.内部类属性(方法),9.3 抽象类,9.3.1 抽象类的概念 9.3.2 抽象类的定义 9.3.3 抽象类的优势,9.3.1 抽象类的概念,前面在介绍类的继承关系时,已经给大家讲过Java中类的层次关系,从父类到子类是由抽象逐渐变得具体,由简单变得复杂的过程。最终的子类对应的就是现实世界当中具体的每个事物,而父类则是由这些具体事物一级级地抽象出来。在抽象的过程中逐渐丢弃掉所有与具体事物相关的东西,只是把它们共同具有的特征保留下来,以至于不能用这样的类来定义具体事物。 因为父类具有它所有子类的共同特征,但子类中有些特征是它们都共同拥有,却又是各不相同的。比如我们在使用Windows系统时,窗口中的不同按钮都具有点击下去会执行命令的功能。这个功能虽然是相同的,但显然我们点击不同的按钮时执行的命令都是不同的。这样的情况就需要用到我们这节要讲的抽象类来搞定啦!,9.3.2 抽象类的定义,抽象类定义的语法格式: abstract class 类名称 / 定义抽象类 / 声明的成员变量和一般方法的定义 public, protected abstract 返回值类型 抽象方法名称(参数列表); 抽象类和普通类定义的区别在于class关键字前面加上了abstract修饰符,告诉Java我们是在定义一个抽象类。抽象类当中除了可以声明抽象方法,其它的均与普通类一样。抽象方法的定义格式与普通方法相比有三点区别: 访问权限必须是public或protected,不能为private 在方法返回类型前面加上abstract修饰符,告诉Java这是个抽象方法 参数列表的小括号结束后直接加上分号结束抽象方法的声明,因为抽象方法不需要在抽象类中定义实现。,9.3.3 抽象类的优势,抽象类能强制我们定义子类中必须定义的方法。而普通类中则没有这个强制要求。如果子类忘了覆盖父类中的方法,Java虽没有任何提示,但程序是不能正确运行的。 抽象类能让我们在扩展子类时少犯错误,它会提示我们必须重新定义一些必须要在子类中覆盖的方法。普通类则没有这个提醒功能啦!这是抽象类的优势之一. 有了抽象类和抽象方法,能让我们简化程序,设计更加统一的方法参数接口。,9.4 接口,9.4.1 接口的概念和定义 9.4.2 接口的实现 9.4.3 模拟的多重继承 9.4.4 接口的多重继承 9.4.5 普通类,抽象类和接口 9.4.6 接口的例子,9.4.1 接口的概念和定义,上一节花了很大的篇幅带大家认识了一下抽象类,同时也了解到它的特性以及能给我们编程带来什么好处。抽象类能让我们把子类当中名称相同但实现不同的方法抽象出来放到父类当中,能使所有的子类拥有统一的外部接口,同时它们还可以拥有个性化的实现。 现在大家不妨考虑一下这类情况,如果我们将这些抽象的方法单独定义出来,也就是说将外部的接口和内部的实现分离开来。然后把接口和内部的实现单独来维护,从而同时保证外部接口的统一性,和内部方法实现的灵活性。这样由抽象类中独立出来的抽象方法在Java中是可以单独存在的,是不是Java又带给我们惊喜啦?它就是我们这一节要介绍的内容Java中的接口。 接口定义的语法: 权限控制字符 interface 接口名称 final 数据类型 常量名称=常数; public abstract 返回类型 方法名称( 参数列表 ); ,9.4.2 接口的实现,接口只定义了类和外面调用的界面,它可以规范类的使用方式,要做到接口提供的功能,还需要在定义类的时候来用代码来实现。接口只起规范界面的作用,真正的功能处理部分,还是得在类当中完成啦!现在来看看如何在类定义当中实现接口所声明的功能吧! 首先还是得向大家介绍下语法,这是必须要经历的过程哈! class 类名称 extends 父类名称 implements 接口名称1, 接口名称2 / 实现接口中所有的抽象方法 ,9.4.3 模拟的多重继承,从一定程度上讲,我们可以认为实现一个接口就是继承了具有同样方法的父类,虽然它们实际情况并不是完全一样。 我们来给大家比较下多接口实现与多继承的情况。图9.6中画出的是Java类定义中继承一个父类,但实现多个接口的情况。图中的类subClass直接继承自类Object,同时它实现了两个接口Interface1和Interface2。这表示类subClass当中具备父类Object中的所有可继承部分,同时还具有两个接口当中所有的抽象方法。类gsubClass情况也是一样,它继承自类subClass,同时实现Interface3和Interface4这两个接口。这样一样类gsubClass当中便有了父类subClass中的所有可继承部分和两个接口的实现。 图9.6,下图中类的继承是用实线连接。因为实现接口毕竟不是真正的类继承,但它们之间差别很小。通过接口的实现,虽然Java并不支持多重继承,我们仍然可以做到和多重继承相似的事情。,9.4.4 接口的多重继承,接口的扩展关键字虽然也是英文的extends单词,可由于它支持多重继承,这与Java当中类的继承并不相同。只是大家一定要弄清楚,接口的继承是支持多重继承的。 接口可以进行多重继承,接下来还是老规矩,请大家看接口的多重继承语法! interface 子接口名称 extends 父接口名称1, 父接口名称2, . / 子接口扩展定义的内容 ,下面的图中是一个比较复杂一点的类和接口的继承关系图在图9.8中,类Object是图中所有子类的父类,它派生出子类subClass,继而subClass再派生出gsubClass。,9.4.5 普通类,抽象类和接口,Java中的普通类,抽象类和接口,Java中的这3种类型可以说都是以类为基础的,但它们又各有特点。请大家看一下下表,里面列出了3种类型的各种特点。,我们用下图来给大家展示出这3种类型的内在规律,以及它们3个之间的过渡情况。,9.4.6 接口的例子,前面用5小节的篇幅给大家介绍了Java中接口的相关特性,大部分只是泛泛地介绍,并没有举出比较完整的实例来。我们在最后用一小节的内容来给大家举例,给大家一个比较全面且完整的实例。让大家能对Java中的接口有个比较直接的认识,而且通过动手也能够加深印象,否则可能看完书之后就忘了怎么用接口啦。,9.5 如何使用Java类库,9.5.1 使用Java类库的准备工作 9.5.2 Calendar类 9.5.3 Random和Math类,9.5.1 使用Java类库的准备工作,其实对于Java类库中的内容我们在之前的例子当中已经用过,如Arrays类,Math类, 甚至是String和Character也是Java类库中提供给我们直接使用的类。虽然可以直接使用,但在使用之前必须在Java程序文件的开头写上一行代码,标明我们要加载包含使用的类所在的包才行。 包是个什么概念呢?它就是类文件的一个容器,或者说仓库。Java所有的程序都是以类来组织的,Java程序的构成也是一个个的类。这些类在编译过之后以一系列的.class文件存在,在程序较大,里面定义的类很多时,这些类文件也会变得数量非常庞大,难以管理。所以Java提供了相关的工具让我们可以把一些功能相关的类打成包,相当于把这些类集中到一个包文件中来,方便管理。 语法格式:import Java包名,9.5.2 Calendar类,日期和时间是程序当中经常用到的信息,所以Java当中已经为我们提供了很实用的处理日期和时间的类Calendar类。先来查一下它放在Java类库的哪个包当中吧。通过Google来查一下“java calendar”。在第一条结果中,就是Java类库的官方信息: /javase/1.5.0/docs/api/java/util/Calendar.html java.lang.Object java.util.Calendar,9.5.3 Random和Math类,Java中当然不只是提供日期和时间处理的类咯,还有两个类需要在这一小节中给大家介绍下。Math类当中包含数学计算当中经常用到的函数,Java把它们全部以静态方法的形式放到了Math类当中。我们可以直接通过Math.方法名()的形式来使用,使用之前别忘了加载包含Math类的包哦!Random类则是Java中用以产生随机数的类,下面先来看的它的用法吧! Random类的位置为:java.util.Random。大家完全可以用Google搜索“java random”来查到它的相关信息,得到的结果中,第一条就是:/javase/1.4.2/docs/api/java/util/Random.html。,9.6 小结,本章主要给大家更深入地介绍Java中与类有关的知识。在大家有了类的概念之后,对Java中的类及其特性作更加深入的讲解。首先是类的对象可以作为Java方法的参数和返回值,再就是用类来声明并创建对象的数组。同样,对象的数组也可以作为Java方法的参数与返
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国移动昭通市2025秋招技术岗专业追问清单及参考回答
- 黄山市中石油2025秋招笔试模拟题含答案数智化与信息工程岗
- 中国广电滨州市2025秋招笔试行测题库及答案互联网运营
- 国家能源浙江地区2025秋招笔试言语理解与表达题专练及答案
- 梧州市中石油2025秋招笔试模拟题含答案电气仪控技术岗
- 三门峡市中石化2025秋招笔试模拟题含答案炼化装置操作岗
- 珠海市中储粮2025秋招基建工程岗高频笔试题库含答案
- 临夏回族自治州中石油2025秋招面试半结构化模拟题及答案新材料与新能源岗
- 白酒营销策划方案
- 国家能源南充市2025秋招面试典型题目及答案
- 青梅嫁接技术课件
- 《经济数学》高职微积分理论全套教学课件
- 川贝母培训课件
- QGDW11059.2-2018气体绝缘金属封闭开关设备局部放电带电测试技术现场应用导则第2部分特高频法
- 2025-2030年汽车模具行业市场发展分析及竞争格局与投资战略研究报告
- 2025年云南省中考语文试卷真题(含答案逐题解析)
- CJ/T 514-2018燃气输送用金属阀门
- CJ/T 244-2016游泳池水质标准
- 环保型氟硅橡胶鞋垫行业跨境出海项目商业计划书
- 智能语音识别技术原理与应用课件
- 签约红娘合作协议书
评论
0/150
提交评论