我正在设计一个用于二十一点游戏的 Card 类。
我的设计是创建一个带有 getValue() 的 Card 类,例如,J 为 11,Q 为 12,K 为 13,然后使用 BlackjackCard 类对其进行扩展以覆盖该方法,以便这些卡片返回 10。
然后我想到了: Card 类的对象应该是不可变的。所以我重新阅读了 Effective Java 2nd Edition 以了解该怎么做,然后我发现不可变类需要是 final 的,以避免子类破坏不可变性。
我还查看了互联网,每个人似乎都同意这一点。
那么 Card 类应该是最终的吗?
你怎么能打破这个类的不变性,扩展它:
class Card {
private final Rank rank;
private final Suit suit;
public Card(Rank rank, Suit suit) {
this.rank = rank;
this.suit = suit;
}
public Rank getRank() {
return rank;
}
public Suit getSuit() {
return suit;
}
public int getValue() {
return rank.getValue();
}
}
谢谢。
最佳答案
子类实际上不能修改其父类中 private final
属性的值,但它可以表现得好像它有,这就是 Effective Java warns against :
关于java - 每个不可变的类都应该是最终的吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5607277/