# 问题与练习-枚举
# 问题
枚举类型可以是
java.lang.String
的子类?答案:不能。 因为所有枚举都隐式继承
java.lang.Enum
。因为一个类只能继承一个父类,所以 Java 语言不支持多个继承状态,因此枚举不能继承其他任何东西。
# 练习
在 前面的练习中写了 Card 类,这里使用枚举类型重写,以便它代表具有枚举类型的卡的排名和顺序。
# 练习-答案
# 第一题
看下之前的实现思路:花色和点数分开(因为点数可以复用);那么这里改成枚举的话,就很清楚了。
public enum Suit {
DIAMONDS, // 方块
CLUBS, // 梅花
HEARTS, // 红套
SPADES // 黑桃
}
public enum Rank {
DEUCE, THREE, FOUR, FIVE, SIX, SEVEN,
EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE
}
// 然后卡牌内部使用枚举来表示具体的某一个牌面
public class Card3 {
private final Rank rank;
private final Suit suit;
public Card3(Rank rank, Suit suit) {
this.rank = rank;
this.suit = suit;
}
public Suit getSuit() {
return suit;
}
public Rank getRank() {
return rank;
}
public String toString() {
return rank + " of " + suit;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 第二题
瞬间感觉之前的练习好随意。。。明明之前也可以使用这种一维数组的,非要用二维的去
public class Deck3 {
private Card3[] cards;
public Deck3() {
Suit[] suits = Suit.values();
Rank[] ranks = Rank.values();
int numSuits = suits.length;
int numRanks = ranks.length;
int numCards = numSuits * numRanks;
cards = new Card3[numCards];
int count = 0;
for (Suit suit : suits) {
for (Rank rank : ranks) {
cards[count++] = new Card3(rank, suit);
}
}
System.out.println(Arrays.toString(cards));
}
public static void main(String[] args) {
new Deck3();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23