我被要求这样做:
设计 并实现一个名为MonetaryCoin的类,该类派生自Coin类 在第5章中介绍。将值存储在代表其价值的货币中 并为货币价值添加getter和setter方法。
硬币类如下:
public class Coin
{
public final int HEADS = 0;
public final int TAILS = 1;
private int face;
// ---------------------------------------------
// Sets up the coin by flipping it initially.
// ---------------------------------------------
public Coin ()
{
flip();
}
// -----------------------------------------------
// Flips the coin by randomly choosing a face.
// -----------------------------------------------
public void flip()
{
face = (int) (Math.random() * 2);
}
// ---------------------------------------------------------
// Returns true if the current face of the coin is heads.
// ---------------------------------------------------------
public boolean isHeads()
{
return (face == HEADS);
}
// ----------------------------------------------------
// Returns the current face of the coin as a string.
// ----------------------------------------------------
public String toString()
{
String faceName;
if (face == HEADS)
faceName = "Heads";
else
faceName = "Tails";
return faceName;
}
}
我想出了这个:
public class MonetaryCoinHW extends Coin
{
public MonetaryCoinHW(int face)
{
setFace(face);
}
public int getFace()
{
if (isHeads()) {
return HEADS;
}
return TAILS;
}
public void setFace( int newFace )
{
while (newFace != getFace()) {
flip();
}
}
然而,我不断收到语法错误......我没有正确使用“超级”吗?我完全糊涂了;我的错是什么?
答案 0 :(得分:4)
不,您没有正确使用super()
。
super()
调用超级构造函数 - 在这种情况下,它将调用继承的Coin()
。由于Coin()
中Coin(int face)
内没有构造函数,因此您的子类无法调用它。
有办法解决这个问题。我相信你需要运行setFace(face)
。这将正确初始化硬币的价值,我认为最适合您的问题。但是,您也可以将Coin(int face)
构造函数添加到Coin
类。不过,你还必须给Coin
一种保持价值的方法。
答案 1 :(得分:0)
类硬币需要具有以下构造函数才能使子类正常工作。
public Coin(int face) {
this.face = face;
}
这将解决问题超级(面部)。
答案 2 :(得分:0)
不,你没有正确地打电话。 你需要有一个带有一个int参数的硬币构造函数。 即。
public Coin (int face)
{
this.face = face;
}
答案 3 :(得分:0)
从您的班级super(face)
中移除 MonetaryCoinHW
行。简单的调用 setFace(face)。但是请注意,face变量在超类中被定义为私有,因此您无法访问它。
默认情况下,它将调用超类的无参数构造函数。
或强>
在类Coin(int face)
Coin
构造函数
如果你想做不同的事情,你只需要在Coin类中定义特殊的构造函数。