Como disseram, existem dois tipos de polimorfia: override e overload
Override: substituir um método de um ascendente (classe-mãe, interface, etc.) por um novo tipo de realizá-lo. Note por exemplo que todo objeto é descendente da classe Object, e portanto, possuem todos os métodos que essa classe tem, como wait() e toString(), embora você possa modificá-los na sua classe a bel prazer, para terem atitudes diferentes (utilizo muito com o toString(), pra mostrar um relatório completo do objeto da forma que eu quiser)
Overload: o mesmo método com parâmetros diferentes, executando ações diferentes (a versão não-gambiarra do parâmetro Optional, por assim dizer). Um exemplo bem dado disso são os diálogos JOptionPane, que recebem diferentes valores, deixando os outros como default: JOptionPane.showMessageDialog (null, “Mensagem”) ou JOptionPane.showMessageDialog(null, “Mensagem”, “Título”, JOptionPane.INFORMATION_MESSAGE) ativa métodos diferentes, mas com o mesmo nome. Largamente utilizado para construtores (deixar atributos como padrão ou já settados)
edit: me passaram link disso e postei sem ver a data, aff que raiva -.-"
sorry