Я разрабатывал класс Card для использования в игре в блэкджек.
Я планировал создать класс Card с getValue (), который возвращает, например, 11 для J, 12 для Q и 13 для K, а затем расширить его с помощью класса BlackjackCard, чтобы переопределить этот метод, чтобы эти карты возвращали 10.
Потом меня осенило: объекты класса Card должны быть неизменяемыми. Итак, я перечитал «Эффективную Java 2-е издание», чтобы увидеть, что делать, и обнаружил, что неизменяемые классы должны быть окончательными, чтобы избежать подкласса, нарушающего неизменяемость.
Я тоже искал в Интернете, и все, кажется, согласны с этим.
Так должен ли класс 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();
}
}
Спасибо.