Toda classe imutável deve ser final?

Eu estava projetando uma classe de Card para ser usada em um jogo de Blackjac

Meu projeto era criar uma classe Card com um getValue () que retornasse, por exemplo, 11 para J, 12 para Q e 13 para K, e depois estendê-lo com uma classe BlackjackCard para substituir esse método, para que esses cartões retornem 10 .

Então algo me atingiu: os objetos da classe Card devem ser imutáveis. Então, reli o Effective Java 2nd Edition para ver o que fazer e lá descobri que as classes imutáveis precisam ser finais, para evitar uma subclasse para quebrar a imutabilidad

ambém procurei na Internet e todos parecem concordar nesse pont

Então, a classe Card deve ser final?

Como você pode quebrar a imutabilidade dessa classe, estendendo-a:

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();
  }
}

Obrigado

questionAnswers(7)

yourAnswerToTheQuestion