Debería ser final cada clase inmutable?

Estaba diseñando una clase de cartas para usar en un juego de Blackjack.

Mi diseño fue hacer una clase de Tarjeta con un getValue () que devuelva, por ejemplo, 11 para J, 12 para Q y 13 para K, y luego extenderlo con una clase BlackjackCard para anular ese método para que esas tarjetas devuelvan 10 .

Entonces algo me golpeó: los objetos de la clase Card deberían ser inmutables. Así que volví a leer Effective Java 2nd Edition para ver qué hacer y allí descubrí que las clases inmutables deben ser finales, para evitar una subclase que rompa la inmutabilidad.

También busqué en Internet y todos parecen estar de acuerdo en ese punto.

Entonces la clase de la tarjeta debe ser fina

¿Cómo puedes romper la inmutabilidad de esta clase, extendiéndola:

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

Gracias

Respuestas a la pregunta(7)

Su respuesta a la pregunta