如何在java中使用super?

时间:2013-04-24 03:55:40

标签: java inheritance

我被要求这样做:

  

设计   并实现一个名为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();
                }
      }

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

4 个答案:

答案 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类中定义特殊的构造函数。