《Java语言导学(原书第6版)》一2.2 类

2.2 类

生活中有很多个体对象,它们都属于同一种类型。例如,生活中可能有上千辆自行车,但是它们的制作工艺和模型都一样。它们都基于同样的设计图纸制作而成,因此包含相同的组件。在面向对象术语中,称这些自行车是对象类——自行车类的实例。类是创建个体对象的蓝图。
比如,下述Bicycle类给出了实现自行车的一种方法:

上述Java语言的语法可能有点陌生,但该类的设计完全基于对前面自行车对象的讨论。cadence、speed和gear等字段表示对象的状态,changeCadence、changeGear和speedUp等方法定义对象与外界的交互方式。
注意,上述Bicycle类的定义中没有main方法。因为类并不是一个完整的应用程序,仅仅是程序可能用到的自行车蓝图。程序中创建和使用Bicycle新对象的任务由其他类来完成。
下面是BicycleDemo类,它创建了两个独立的Bicycle对象并调用它们的方法:

执行完毕后,会输出两辆自行车最终的踏板频率、速度和档位:

时间: 2024-11-05 21:51:47

《Java语言导学(原书第6版)》一2.2 类的相关文章

《数据结构与抽象:Java语言描述(原书第4版)》一1.1 什么是包

1.1 什么是包 设想一个纸袋,或反复使用的布袋,甚至一个塑料袋.当人们购物.打包午餐或者吃土豆片时会用到袋子.袋子里装着东西.在日常用语中,包(也称为袋子--译者注)是一种容器.但在Java中,容器(container)是一个对象,它的类派生于标准类Container.这样的容器用在图形程序中.在Java中,不把包(bag)看作一种容器,而是一种集合.包与其他集合的区别是什么呢?包仅仅是含有项,但没有按某种方式规定项的次序,也允许有重复的项.大多数的行为可由其他类型的集合执行.当描述本章中设计

《数据结构与抽象:Java语言描述(原书第4版)》一2.1.2 一组核心方法

2.1.2 一组核心方法 基于Java语言数组实现的ADT包吸收了教室示例中展现的一些想法.由此得到了类ArrayBag,它实现了在程序清单1-1中见到过的接口BagInterface.接口中的每个公有方法对应于ADT包的一个操作.我们记得,接口为包中的对象定义了泛型T.我们在ArrayBag的定义中也用到了这个泛型.类ArrayBag的定义可能相当难懂.该类确实有不少的方法.对于这样的类,你不应该定义整个类,然后试图去测试它.而是应该先确定一组核心方法(core method)来实现并测试这些

《数据结构与抽象:Java语言描述(原书第4版)》一JI2.1 基础

JI2.1 基础 当在一个方法内发生异常时,该方法创建一个异常对象,并将它传给Java运行时系统.我们说方法抛出(throw)一个异常.被抛出的异常是发给程序的其他部分的一个信号,表示某些意外的事情发生了.根据异常类的类型,以及异常对象通过其方法告诉我们的信息,代码可以对其进行适当的响应处理.当发现并响应异常时,就是处理(handle)异常. 异常属于不同的类,不过所有这些类都是标准类Throwable的后代.Throwable在Java类库中,不需要import语句就可以使用.异常分为以下三组

《数据结构与抽象:Java语言描述(原书第4版)》一P.3.2 实现一个接口

P.3.2 实现一个接口 实现接口的任何类,必须在类定义的开头使用implements子句进行说明.例如,如果类Circle实现了接口Measurable,它的开头就是下面这种形式: 然后,类必须定义接口中声明的每个方法.在本例中,类Circle必须至少实现方法getPerimeter和getArea.如果写一个实现Measurable的类Square,这个类的开头应该是这样的: 且它至少应该定义方法getPerimeter和getArea.显然,这两个方法的定义不同于它们在类Circle中的定

《数据结构与抽象:Java语言描述(原书第4版)》一P.1 封装

P.1 封装 如果你想学习驾驶,那么对汽车的哪些描述对你最有用?显然不是描述它的发动机如何周而复始地获取空气和汽油,点燃空气和汽油的混合物,然后排出的过程.当你想学习驾驶时,这样的细节是不必要的.事实上,可以以你的方式获知这些细节.如果你想学习驾驶,最有用的汽车描述是如下的这些特点: 如果你将脚踩在油门踏板上,汽车将开得更快. 如果你将脚踩在制动踏板上,汽车将慢下来并最终停止. 如果你将方向盘向右转,汽车将右转. 如果你将方向盘向左转,汽车将左转. 就像你不需要告诉想开车的人发动机是如何工作的一

《数据结构与抽象:Java语言描述(原书第4版)》一练习

练习 1.说明程序清单1-3中给出的类PiggyBank的每个方法:说明方法的目的:描述它的参数:写前置条件.后置条件和方法头的伪代码.然后写一个用于这些方法的Java接口,包括javadoc风格的注释. 2.假定groceryBag是一个包,它被表示不同杂货名字的10个字符串填满了.写Java语句,计数groceryBag中"soup"的出现次数并全部删除.不要从包中删除任何其他的字符串.报告包中出现的"soup"的个数.groceryBag中可能不包含"

《数据结构与抽象:Java语言描述(原书第4版)》一P.4.3 统一建模语言

P.4.3 统一建模语言 图P-4中的用例图是更强大表示法的一部分,这个表示法称为统一建模语言(Unified Modeling Language,UML).设计人员使用UML来说明软件系统中必需的类及它们的关系.UML能给出复杂系统的整体视图,比用自然语言或程序设计语言描述更有效.例如,英语可能有二义性,而Java代码提供更多的细节.给出明确的类之间的交互图,是UML的强项之一.除了用例图之外,UML还能提供类图,类图将每个类的描述放在类似于CRC卡的方框中.方框内包含类名.它的属性(attr

《数据结构与抽象:Java语言描述(原书第4版)》一2.2.1 可变大小数组

2.2.1 可变大小数组 策略.当教室满了时,能容纳更多学生的一种办法是移到一间更大的教室.用类似的方式,当数组满了时,可以将它的内容移到一个更大的数组中.这个过程称为调整(resizing)数组大小.图2-7显示两个数组:一个是有5个连续内存单元的原始数组,另一个数组(两倍于原始数组大小)在计算机的另一块内存中.如果将数据从原始的小数组中复制到新的大数组的开头部分,得到的结果像是扩展了原来的数组一样.这种机制的唯一不足是新数组的名字:你想让它与原始数组同名.马上就会看到如何完成这个工作. 细节

《数据结构与抽象:Java语言描述(原书第4版)》一1.2 说明一个包

可以使用UML将方法表示为: 且将这行添加到类图中.可以使用一个布尔值方法来测试包是否为空,同样该方法没有参数.用伪代码及UML描述这个方法的规格说明 及 将这行添加到类图中. 注:因为通过查看getCurrentSize是否返回0就能检测包何时为空,所以并不真的需要操作isEmpty.但是它是所谓的便利方法(convenience method),所以很多集合都提供这样一个操作.现在想向包中添加给定的对象.可以将这个方法命名为add,并有一个表示新项的参数.可以写出下列伪代码: 我们可能试图让

《数据结构与抽象:Java语言描述(原书第4版)》一2.1.3 实现核心方法

2.1.3 实现核心方法 数据域.在定义任何核心方法之前,需要考虑类的数据域.因为包要保存一组对象,所以一个域是这些对象的数组.数组的长度定义了包的容量.可以让客户指定这个容量,我们也可以提供一个默认容量.另外,我们想跟踪包中当前项的个数.所以可以为我们的类定义如下的数据域: 并将它们加到图1-2中类的UML表示中.得到的表示如图2-2所示. 程序设计技巧:终态数组 通过声明数组bag是类ArrayBag的一个终态数据成员,可知变量bag中的引用不能改变.虽然以这种方式声明数组是一种好的做法,但