Olá Maurício, tudo bem ?
Vou dividir a resposta para te ajudar
Explicação
No exemplo abaixo, você está apenas criando uma nova referência para o mesmo objeto filmeDoPaulo na memória.
Filme f1 = filmeDoPaulo;
Polimorfismo ocorre quando você tem uma referência de uma superclasse apontando para um objeto de uma subclasse, por exemplo:
Titulo t1 = new Filme("Dogville", 2003);
Aqui sim é polimorfismo, porque Titulo é a superclasse e Filme é a subclasse. A variável t1 pode apontar para objetos de diferentes subclasses de Titulo (como Filme ou Serie), e você pode chamar métodos que são definidos na superclasse e sobrepostos na subclasse.
De fato, vale ressaltar que se não soubessemos ou se estivessimos usando esse tipo atribuição de uma subclasse para uma superclasse ai sim estamos usando Polimorfismo
Amplicação
Vocẽ pode se perguntar, por que precisaria fazer uma referência a um objeto se já tenho ele?
Filme filmeDoPaulo = buscaFilmeNoBanco("Dogville");
Filme f1 = filmeDoPaulo;
- Passar o mesmo objeto para diferentes estruturas
public class Principal {
public static void main(String[] args) {
Filme filmeDoPaulo = new Filme("Dogville", 2003);
filmeDoPaulo.avalia(10);
Filme filmeFavorito = filmeDoPaulo;
ArrayList<Filme> assistidos = new ArrayList<>();
assistidos.add(filmeDoPaulo);
ArrayList<Filme> recomendados = new ArrayList<>();
if (filmeFavorito.getClassificacao() > 8) {
recomendados.add(filmeFavorito);
}
System.out.println("Filmes recomendados:");
for (Filme f : recomendados) {
System.out.println(f.getNome());
}
}
}
No exemplo acima filmeDoPaulo e filmeFavorito apontam para o mesmo objeto na memória. Ter nomes diferentes ajuda a explicar o contexto de uso: um é o filme que o Paulo viu, o outro é a referência que usamos para recomendações.
Espero ter ajudado!