单人纸牌(Elevens Lab)活动1:设计并创建class Card

陈 欣发布

导言

在本活动中,你将完成class Card并以此来创建扑克牌object。

回想一下你玩过的扑克游戏。这些游戏需要扑克牌object本身“记住”什么信息?这些游戏又需要扑克牌object能够执行什么操作?

探索

现在让我们来实现表示扑克牌的class。它应该包含哪些实例变量呢?应该提供哪些method呢?与同学讨论你对class Card的想法。

阅读目录里已经部分完成的class Card框架。在读的时候,你会注意到在toString method上使用的@Override注释。Java中,@Override注释被用来表明某个method一定重写了parent class中的同名method。在这个例子中,class Object(Java所有class默认的parent class)的toString method要被class Card的对应method重写。如果该method并没有实际重写parent class的对应method,Java编译器会报错。

这个功能在某些情况下会相当有用。Java的初学者常常会在编写child class时搞错parent class中的method签名(即参数列表和返回值的组合)。例如,在以下的class Weight中,程序员希望toString method能被作为ObjecttoString而调用。

public class Weight {
  private int pounds;
  private int ounces;

  public String tostring(String str) {
    return this.pounds + " lb. " + this.ounces + " oz.";
  }
}

不过,程序员很快会发现这段代码达不到预期的效果。class Object中的toString有不同的名字和签名。以下method才能正确重写toString

public String toString() {
  return this.pounds + " lb. " + this.ounces + " oz.";
}

对上一个例子,如果加上@Override注释的话,Java编译器就会报错以及时提醒程序员更正问题。

练习

  1. 利用框架完成class Card的实现。你需要完成:
    1. 一个接受两个String参数和一个int参数的构造函数。String参数分别表示扑克牌的大小和花色。int参数表示扑克牌的点数值。
    2. 读取大小、花色和点数值的method。
    3. 测试两个扑克牌object是否相等的method。
    4. toString method用来以字符串形式输出扑克牌。格式是大小 of 花色 (point value = 点数值)
  2. 在完成class Card之后,利用同一目录中的CardTester.java来创建三个Card的object,并测试它们的每个method。

陈 欣

AADPS创始人

1 条评论

AP计算机科学实验:单人纸牌(Elevens Lab) – AP Computer Science · 2018年5月12日 下午2:09

[…] 活动1:设计并创建class Card […]

发表回复