O gabarito é a letra C.
O polimorfismo está relacionado à possibilidade de se usar o mesmo nome para métodos diferentes e à capacidade que o programa tem em discernir, dentre os métodos homônimos, aquele que deve ser executado. De maneira geral, o polimorfismo permite a criação de programas mais claros, pois elimina a necessidade de darmos nomes diferentes para métodos que conceitualmente fazem a mesma coisa, e também programas mais flexíveis, pois facilita em muito a extensão dos mesmos. É dividido em estático e dinâmico.
Polimorfismo Estático: ocorre quando na definição de uma classe criamos métodos com o mesmo nome, porém com argumentos diferentes. Dizemos neste caso que o método está sobrecarregado (overloading). A decisão de qual método chamar é tomada em tempo de compilação, baseada nos argumentos que foram passados.
Polimorfismo Dinâmico: está associado com o conceito de herança e ocorre quando uma subclasse redefine um método existente na superclasse. Dizemos neste caso que o método foi sobreescrito (overriding) na subclasse. A decisão de qual método executar é tomada somente em tempo de execução, como veremos mais adiante.