2
2
======
3
3
4
4
# 介绍
5
- 在本实验中,你将通过使用抽象类和接口来实验Java继承 。延续实验2的游戏主题,你将实现一组用于表示不同类型库存项(inventory of items)的类。另外,你将实现Item对象的比较,即便它们是不同类型的Item。
5
+ 在本实验中,你将通过使用抽象类和接口来体验Java继承 。延续实验2的游戏主题,你将实现一组用于表示不同类型库存项(inventory of items)的类。另外,你将实现Item对象的比较,即便它们是不同类型的Item。
6
6
7
7
# 学习目标
8
8
完成本实验后,你应该能够:
9
9
1 . 创建并扩展抽象类和方法
10
- 2 . 用接口为多各类定义标准行为
10
+ 2 . 用接口在多个类间定义标准行为
11
11
12
12
# 准备
13
- 在你的eclipse工作区总导入已有的 [ lab6] ( lab6.zip ) 实现
13
+ 在你的eclipse工作区中导入已有的 [ lab6] ( lab6.zip ) 实现
14
14
15
15
# 库存项类设计
16
- 下面的UML表示库存和各种类型库存项的对应的类,你的任务是实现这些类,并实现响应的单元测试代码。需要实现的类和方法在UML中以粗体字表示 。
16
+ 下面的UML表示库存和各种类型库存项的对应的类,你的任务是实现这些类,并实现相应的单元测试代码。需要你实现的类和方法在UML中以粗体字表示 。
17
17
18
18
![ uml design] ( images/uml_design.png )
19
19
20
- 以斜体表示的类时抽象类或者接口 。具体的子类必须实现抽象父类的所有方法。在本实验中,** Item** ,** Consumable** 和** Weapon** 是抽象类。
20
+ 以斜体表示的类是抽象类或者接口 。具体的子类必须实现抽象父类的所有方法。在本实验中,** Item** ,** Consumable** 和** Weapon** 是抽象类。
21
21
22
- 从** Item** 到** Comparable** 的线表示** Item** 必须实现** Comparable** 接口。类似的,** ItemWeightComparator** 类必须实现** ItemComparator** 接口, 该接口继承** Comparator** 接口。** ItemWeightComparator** 根据高度比较不同的库存项。
22
+ 从** Item** 到** Comparable** 的线表示** Item** 必须实现** Comparable** 接口。类似的,** ItemWeightComparator** 类必须实现** ItemComparator** 接口( 该接口继承** Comparator** 接口) 。** ItemWeightComparator** 根据高度比较不同的库存项。
23
23
24
24
# 实验步骤
25
- ** Item** 类时游戏中存在的所有类型库存项的公共祖先 :
25
+ ** Item** 类是游戏中存在的所有类型库存项的公共祖先 :
26
26
27
27
- 所有的** Item** 实例都有一个唯一的整型* id* ,由** Item** 构造函数赋值,第一个item实例赋予* id* =0,下一个赋予1,依次类推。注意你可以利用提供的类变量来方便你实现构造函数(还有一个静态的* reset()* ,方便你写单元测试)。
28
28
- * compareTo(Item other)* :** Item** 类实现** Comparable** 接口,你需要为类添加* compareTo(Item other)方法。* compareTo(Item other)方法接受另外一个** Item** 实例作为参数,并和当前实例进行比较。如果当前实例的* value* 字段大于* other的value* 字段,那么方法就应该返回一个正整数(惯例是1)。如果当前实例的* value* 字段小于* other的value* 字段,那么方法就应该返回一个负整数(惯例是-1)。如果两者相等,就以items的name的字符串序进行比较(相当于比较字符串的每个字符,忽略大小写,例如A == a),返回恰当的值。* 提示:你可以利用String类API本身提供的功能* 。
31
31
ring -- Value: 3000, Weight: 0.01
32
32
```
33
33
34
- ** ItemWeightComparator** 类实现** ItemComparator** 接口,意思是该类的实例可以被传递给需要 ** Item** 类型comparator的方法 。
34
+ ** ItemWeightComparator** 类实现** ItemComparator** 接口,意思是该类的实例可以被传递给需要类型为 ** Item** 的comparator的方法 。
35
35
36
36
- ** ItemWeightComparator** 的* compare(Item first, Item second)方法的功能和** Item** 类的* compareTo(Item other)方法类似,但是比较的是** Items** 的* weight* 字段,如果weights是相等的,该方法应该调用* 第一个* ** Item** 的* compareTo(Item other)* 方法并返回结果值。
37
37
38
- ** Weapon** 类是** Item** 的一个抽象实现,它表示使用后可以造成伤害和损坏的项目。该类的实现已经提供给你。所有的** Weapon** 实例有一个基准伤害值* baseDamage* 和一个修正值* damageModifier* 。这两个值的和决定了该武器使用后所能造成的* 有效伤害* 。另外,** Weapons** 有一个基准牢固度值* baseDurability* ,和一个对应的修正值* durabilityModifier* 。这两个值的和决定了** Weapon** 的有效牢固度。当改值降到零或更少 ,有效牢固度就是零,该武器被认为是坏了且无法再使用。
38
+ ** Weapon** 类是** Item** 的一个抽象实现,它表示使用后可以造成伤害和损坏的项目。该类的实现已经提供给你。所有的** Weapon** 实例有一个基准伤害值* baseDamage* 和一个修正值* damageModifier* 。这两个值的和决定了该武器使用后所能造成的* 有效伤害* 。另外,** Weapons** 有一个基准牢固度值* baseDurability* ,和一个对应的修正值* durabilityModifier* 。这两个值的和决定了** Weapon** 的有效牢固度。当该值降到零或更少 ,有效牢固度就是零,该武器被认为是坏了且无法再使用。
39
39
40
40
我们提供了几个已实现的方法,包括:
41
41
42
42
- * Weapon.getDamage()* :返回** Weapon** 的有效伤害
43
43
- * Weapon.getDurability()* :返回** Weapon** 的有效牢固度
44
- - * Weapon.toString()* :对于一个 * name* 是"hammer",* value* 是300,* weight* 是2.032,* baseDamage* 值是30.4219,* damageModifier* 值是0.05,* baseDurability* 值是0.7893,* durabilityModifier* 为0.05的一个** Weapon** ,方法将返回如下格式的字符串:
44
+ - * Weapon.toString()* :对于 * name* 是"hammer",* value* 是300,* weight* 是2.032,* baseDamage* 值是30.4219,* damageModifier* 值是0.05,* baseDurability* 值是0.7893,* durabilityModifier* 为0.05的一个** Weapon** ,方法将返回如下格式的字符串:
45
45
```
46
46
hammer -- Value: 300, Weight: 2.03, Damage: 30.47, Durability: 83.93%
47
47
```
48
- - * Weapon.use()* :该方法返回一个字符串,描述党一个 ** Weapon** 被使用时,会发生什么。对于一个名为"hammer"的** Weapon** ,有效伤害30.4725,方法返回如下:
48
+ - * Weapon.use()* :该方法返回一个字符串,描述当一个 ** Weapon** 被使用时,会发生什么。对于一个名为"hammer"的** Weapon** ,有效伤害30.4725,方法返回如下:
49
49
```
50
50
You use the hammer, dealing 30.47 points of damage.
51
51
```
@@ -62,13 +62,13 @@ You can't use the hammer, it is broken.
62
62
63
63
** Sword** 类是** Weapon** 的一个具体实现,你必须提供:
64
64
- Sword类的所有实例的* name* 是"sword"
65
- - * Sword.polish()* :每次该方法被调用时,该方法将实例的** damageModifier** 增加* Weapon.MODIFIER_CHANGE_RATE* ,直到* baseDamage* 值的25%。如果一个sword的基准伤害要到100 ,那么最大有效伤害能够增加到125。
65
+ - * Sword.polish()* :每次该方法被调用时,该方法将实例的** damageModifier** 增加* Weapon.MODIFIER_CHANGE_RATE* ,直到* baseDamage* 值的25%。如果一个sword的基准伤害到100 ,那么最大有效伤害能够增加到125。
66
66
67
- ** Bow** 类是** Weapon** 类的具体实现,你必须提供:s
68
- - Bow类的所有实例必须命名为 "bow"
69
- - * Bow.polish()* :该方法将实例的** durabilityModifier** 增加* Weapon.MODIFIER_CHANGE_RATE* ,所有的更改都被限制以使 ** 有效牢固度"不会大于1。
67
+ ** Bow** 类是** Weapon** 类的具体实现,你必须提供:
68
+ - Bow类的所有实例的 * name * 是 "bow"
69
+ - * Bow.polish()* :该方法将实例的** durabilityModifier** 增加* Weapon.MODIFIER_CHANGE_RATE* ,更改将被限制以使 ** 有效牢固度"不会大于1。
70
70
71
- 和实现2非常类似 ,** Inventory** 在游戏中是items的容器。该类已近被部分实现 ,但你需要添加如下方法:
71
+ 和实验2非常类似 ,** Inventory** 在游戏中是items的容器。该类已经被部分实现 ,但你需要添加如下方法:
72
72
- * Inventory.sort()* :根据* 值value* 对** Inventory** 实例中的items进行排序
73
73
- * Inventory.sort(ItemComparator comparator)* :根据* 高度weight* 对** Inventory** 实例中的items进行排序。
74
74
@@ -90,7 +90,7 @@ You eat the bread.
90
90
You feel sick.
91
91
```
92
92
93
- # 特定步骤
93
+ # 具体说明
94
94
从lab6.zip提供的类文件开始
95
95
1 . 修改** Item** ,** Consumable** 和** Inventory** 类
96
96
2 . 创建** Sword** ,** Bow** 和** ItemWeightComparator** 类
0 commit comments