Olá, Westes, tudo bem?
Uma abordagem comum para resolver esse tipo de problema é usar a palavra-chave final em métodos que você não deseja que sejam sobrescritos ou utilizados em subclasses. No seu caso, se você não quer que o nome de um filme seja alterado, você pode simplesmente não implementar o método setNome() na classe Filme, ou, se ele for necessário por algum motivo, você pode torná-lo privado ou protegido, dependendo do contexto.
Outra abordagem é usar interfaces ou classes abstratas. Por exemplo, você pode ter uma classe abstrata Titulo com um método abstrato setNome(), que só é implementado na classe Serie e não na classe Filme. Isso garante que apenas séries possam ter seus nomes alterados.
Aqui está um exemplo simplificado de como você poderia estruturar isso:
public abstract class Titulo {
private String nome;
public Titulo(String nome) {
this.nome = nome;
}
public String getNome() {
return nome;
}
// Método abstrato que será implementado apenas em Serie
public abstract void setNome(String nome);
}
public class Filme extends Titulo {
public Filme(String nome) {
super(nome);
}
// Não implementa setNome, então não pode ser usado
}
public class Serie extends Titulo {
public Serie(String nome) {
super(nome);
}
@Override
public void setNome(String nome) {
// Implementação para permitir a mudança de nome
super.nome = nome;
}
}
Com essa estrutura, você garante que apenas Serie pode alterar o nome, enquanto Filme não tem essa capacidade. Isso respeita sua regra de negócio e mantém o código organizado e claro.
Espero ter ajudado e bons estudos!
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!