扩展类,隐式超级构造函数是未定义的错误

时间:2012-11-29 00:53:58

标签: java processing

我正在使用Java。我有2个班级

class Card
class Deck extends Card

我收到构造函数错误。

我必须为大学制作二十一点游戏,并且必须延长甲板课程。

我该怎么做才能解决这个问题?

class Card
{
    int rank, suit;
    String[] suits = { "hearts", "spades", "diamonds", "clubs" };
    String[] ranks  = { "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King" };

    Card(int suit, int rank)
    {
        this.rank=rank;
        this.suit=suit;
    }

    String toString()
    {
          return ranks[rank] + " of " + suits[suit];
    }

    int getRank() {
         return rank;
    }

    int getSuit() {
        return suit;
    }
}




class Deck extends Card{

    ArrayList <Card> cards;
    int numberdeck;
    Deck()
    {
        cards = new ArrayList<Card>();
        for (int a=0; a<=3; a++)
        {
            for (int b=0; b<=12; b++)
            {
                cards.add( new Card(a,b) );
            }
        }
    }

    Card drawFromDeck()
    {
        Random generator = new Random();
        int index= generator.nextInt( cards.size() );
        return cards.remove(index);
    }

    int getTotalCards()
    {
        return cards.size();
    }
}

2 个答案:

答案 0 :(得分:3)

子类中的构造函数应该调用超类中的相应构造函数,但是,在代码中找不到这样的构造函数。

添加一个不向超类提取参数的构造函数,或者让子类中的构造函数调用超类中的构造函数。

您可以在子类的构造函数体的开头使用super(0, 0);调用超类的构造函数。

答案 1 :(得分:2)

Deck真的不应该延伸Card。子类别编码 is-a 关系。狮子是动物,所以Lion extends Animal。你可以看出子类是不合适的,因为getRank()和getSuit()方法对整张牌都没有意义。

一副纸牌不是卡片;甲板包含其他卡片。 包含关系已由ArrayList <Card> cards数组表示。