1

我被要求这样做:

设计并实现一个名为 MonetaryCoin 的类,该类派生自第 5 章中介绍的 Coin 类。在货币硬币中存储一个表示其价值的值,并为货币价值添加 getter 和 setter 方法。

Coin 类如下:

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();
                }
      }

但是,我不断收到语法错误......我没有正确使用“超级”吗?我完全糊涂了;我的错误是什么?

4

4 回答 4

4

不,你没有super()正确使用。

super()调用超构造函数——在这种情况下,它将调用继承的Coin(). Coin()由于for内部不存在构造函数Coin(int face),因此您的子类无法调用它。

有办法解决这个问题。我相信你需要跑步setFace(face)。这将正确初始化硬币的价值,我认为最适合您的问题。但是,您也可以将Coin(int face)构造函数添加到Coin类中。不过,您还必须提供Coin一种方法来保持价值。

于 2013-04-24T03:58:01.233 回答
0

类硬币需要具有以下构造函数才能使您的子类正常工作。

public Coin(int face) {
    this.face = face;
}

这将解决问题 super(face)。

于 2013-04-24T04:04:14.220 回答
0

不,您没有正确调用超级。您需要具有一个参数为 int 的硬币构造函数。IE

public Coin (int face) 
{ 
      this.face = face;
}
于 2013-04-24T04:06:29.297 回答
0

任何一个

super(face)从你的班级中删除该行MonetaryCoinHW。和简单的调用setFace(face)。但还要注意,face 变量在您的超类中定义为私有的,因此您无法访问它。

默认情况下,它将调用超类的无参数构造函数。

或者

在类中定义Coin(int face)构造函数Coin

如果你想做一些不同的事情,你只需要在 Coin 类中定义特殊的构造函数。

于 2013-04-24T04:09:50.623 回答