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