2012-11-29 71 views
0

我正在使用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(); 
    } 
} 

回答

3

子類中的構造函數應該調用超類中相應的構造函數,但是在代碼中找不到這樣的構造函數。

可以添加一個構造函數,該構造函數不向超類引用任何參數,或者使子類中的構造函數調用超類中的構造函數。

您可以在子類的構造函數體的開頭使用super(0, 0);來調用超類的構造函數。

+0

每種方式會有什麼不同? –

2

Deck確實不應該延伸Card。子分類編碼is-a關係。獅子是一種動物,所以Lion extends Animal。你可以知道子分類是不合適的,因爲getRank()和getSuit()方法在整張紙牌上沒有意義。

一副牌不是牌;一副牌包含其他牌。 包含關係已由ArrayList <Card> cards數組表示。

+0

這就是我們必須要做的。我們有2個選項。選項1 =甲板實現CardInterface或Option2:class甲板擴展卡 – emre

+0

@ baris22好吧,教授沒有冒犯,但是這兩種選擇都是不好的面向對象的設計。 –

+0

無論如何選擇接口的方法,至少爲你的下一個家庭任務。繼承是15年前流行的技術。繼承有許多缺點。 – AlexWien

相關問題