Gabarito E
Na programação orientada a objetos, o polimorfismo permite que referências de tipos de classes mais abstratas representem o comportamento das classes concretas que referenciam. Assim, é possível tratar vários tipos de maneira homogênea (através da interface do tipo mais abstrato). O termo polimorfismo é originário do grego e significa "muitas formas" (poli = muitas, morphos = formas).
O polimorfismo é caracterizado quando duas ou mais classes distintas têm métodos de mesmo nome, de forma que uma função possa utilizar um objeto de qualquer uma das classes polimórficas, sem necessidade de tratar de forma diferenciada conforme a classe do objeto.
Uma das formas de implementar o polimorfismo é através de uma classe abstrata, cujos métodos são declarados mas não são definidos, e através de classes que herdam os métodos desta classe abstrata.
"Retroceder Nunca Render-se Jamais !"
Força e Fé !
Fortuna Audaces Sequitur !
Existem 2 tipos de Polimorfismo:
Polimorfismo Estático (sobrecarga): Vários métodos com mesmo nome mas com parâmetros distintos (sobrecarga). Fica a cargo do compilador escolher de acordo com as listas de argumentos os procedimentos ou métodos a serem executados.
Polimorfismo Dinâmico (sobreescrita): O método da sobreescrita tem que ser idêntico ao método da classe herdada, ou seja, precisa ter o mesmo nome, valor de retorno e argumentos. O que muda é a implementação do método.
Fonte. https://www.devmedia.com.br/uso-de-polimorfismo-em-java/26140