2012-04-24 6 views
6

私はよく慣れていないJavaのコードを読んでいますが、クラスがDeck(カードのデッキ用)の場合、配列のインスタンス変数はすでにCardsですDeck延長または継承Card?クラスAはクラスBを継承すると考えました.AがB(猫は動物のために動物を継承します)の場合のみです。いくつかのJavaコードでは、DeckクラスがCardクラスを拡張するのはなぜですか?

コードは以下の通りです:

public class Deck <T extends Card> { 
    private ArrayList<T> cards; 
    private int dealtIndex = 0; // marks first undealt card 

    public Deck() { 
    } 

    public void setDeckOfCards(ArrayList<T> deckOfCards) { 
     cards = deckOfCards; 
    } 

    public void shuffle() { 
     for (int i = 0; i < cards.size(); i++) { 

    [...] 
} 

public abstract class Card { 
    private boolean available = true; 

    /* number or face that's on card - a number 2 through 10, 
    * or 11 for Jack, 12 for Queen, 13 for King, or 1 for Ace 
    */ 
    protected int faceValue; 
    protected Suit suit; 

    public Card(int c, Suit s) { 
     faceValue = c; 
     suit = s; 
    } 

    public abstract int value(); 

    public Suit suit() { 
     return suit; 
    } 

    [...] 

} 

答えて

16
public class Deck <T extends Card> 

デッキは、カードを拡張しません。

これはジェネリック型の注釈であり、Tがカードのサブクラスである場合、デッキのタイプはTとすることができます。

これは、Javaのコレクションクラスと同じです。この場合も、List of StringはStringを拡張しません(Stringインスタンスは含まれます)。あなたはそれを間違った方法を解釈

Deck<PokerCard> pokerDeck = new Deck<PokerCard>(); 

PokerCard c = pokerDeck.getTopCard(); 
// now you know it is a PokerCard, not just any old card 

pokerDeck.insert(new MagicTheGatheringCard()); 
// get a compile error for wrong card type 
+0

あなたは私にそれを打つ。コンパイル時エラーの良い例。 – user949300

+0

私はいつも私のポケモンカードでポーカーをしています。 – JustSid

0

これはあなたのようなコードを記述することができます。あなたはTのクラス(Cardを拡張する)を読むべきです。あなたがここにあるList<Something>(何かのリスト)を持っているので、Deck<Cards>(カードのデッキ)。 PokerCard拡張カードの場合は、Deck<PokerCard>でもかまいません。

2

クラスデッキはカードを拡張していません。それはカードのArrayListを含んでいます。

<T extends Card>表記はちょっと混乱しますが、このデッキはTによって「パラメタイズ」されていることを意味します。これは、カードのサブクラスである必要があります。したがって、それはピノクルカード、ブリッジカード、タロットカードなどとすることができる。

Deck myTarot = new Deck<TarotCard>(); 
0

クラスは、そのクラスのプロパティを継承したいときに別のクラスを拡張します。例えば、 。

Class A{ 

public void show() 
{ 
//something to show 
} 
} 

Class B extends A{ 

//B can now enjoy the show() function defined by A 
} 

これは継承の仕組みです。

猫は動物のサブセットであるため、動物はそのカテゴリの下に来ることができるので、動物を拡張します。

ここではデッキはカードを拡張していません。

関連する問題