1

私はこれをするように頼まれました:

第 5 章で示した Coin クラスから派生した MonetaryCoin というクラスを設計して実装します。その値を表す通貨コインに値を格納し、通貨値のゲッター メソッドとセッター メソッドを追加します。

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()。for内にはコンストラクターが存在しないCoin()ためCoin(int face)、サブクラスはそれを呼び出すことができません。

これに対処する方法はいくつかあります。走る必要があると思いますsetFace(face)。これにより、コインの値が適切に初期化されます。問題に最も適していると思います。Coin(int face)ただし、コンストラクターをCoinクラスに追加することもできます。Coinただし、値を保持する方法も提供する必要があります。

于 2013-04-24T03:58:01.233 に答える
0

いいえ、スーパーを正しく呼び出していません。int である 1 つの引数を持つコインのコンストラクターが必要です。すなわち

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 に答える
0

サブクラスが正しく機能するには、クラスコインに次のコンストラクターが必要です。

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

これにより、super(face) の問題が解決されます。

于 2013-04-24T04:04:14.220 に答える