6

私はJavaでコードを読んでいますが、これはよく知らないものですが、クラスがDeck(トランプのデッキ用に)ある場合、すでに配列のインスタンス変数が含まれているのは奇妙に思えます。CardsなぜDeck拡張または継承するのCardでしょうか。クラスAはAがBの場合にのみクラスBを継承すると思いました(猫は動物であるため、猫は動物を継承します)。

コードは以下のとおりです。

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; 
    }

    [...]

}
4

4 に答える 4

17
 public class Deck <T extends Card> 

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

これは一般的なタイプの注釈であり、デッキはタイプTである可能性があることを示しています。ここで、Tはカードのサブクラスです。

これは、Javaのコレクションクラスと同じです。ここでは、文字列のリストも文字列を拡張しません(ただし、文字列インスタンスが含まれます)。

これにより、次のようなコードを記述できます。

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
于 2012-04-24T03:23:16.203 に答える
2

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

<T extends Card>表記は少し紛らわしいですが、それはこのデッキがTによって「パラメータ化」されていることを意味します。Tはカードを拡張する必要があります(サブクラスである必要があります)。つまり、ピノクルカード、ブリッジカード、タロットカードなどです。

Deck myTarot = new Deck<TarotCard>();
于 2012-04-24T03:25:58.740 に答える
0

あなたはそれを間違った方法で解釈しました。Tのクラスデッキ(カードを拡張する)を読む必要があります。そのように、あなたはここに(カードのデッキList<Something>)を持っている(何かのリスト)を持っています。PokerCardがカードを拡張Deck<Cards>する場合、それも可能性がありますDeck<PokerCard>

于 2012-04-24T03:25:39.947 に答える
0

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

Class A{

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

Class B extends A{

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

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

猫は動物のサブセットであるため、猫は動物を拡張します。猫はそのカテゴリに分類される可能性があります。

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

于 2012-04-24T03:26:43.723 に答える