我正在阅读一些我不熟悉的 Java 代码,但是如果一个类是 Deck
(对于一副纸牌),它已经有一个实例变量,这似乎很奇怪一组 Cards
,那么为什么 Deck
扩展或继承 Card
?我认为只有当 A 是 B 时,A 类才继承 B 类(Cat 继承 Animal,因为猫是动物)。
代码如下:
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;
}
[...]
}
最佳答案
public class Deck <T extends Card>
Deck 不扩展 Card。
这是一个泛型类型注释,它表示 Deck 可以是 T 类型,其中 T 是 Card 的子类。
这与 Java 的集合类相同,其中 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
关于java - 在一些 Java 代码中,为什么类 Deck 扩展 Card 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10291323/