Trata-se de uma questão sobre orientação a objetos.
O comando da questão pergunta qual a propriedade que permite a classe animal se comportar de forma diferente a cada invocação do método falar().
Vamos para as alternativas:
A) Errada. Encapsulamento é a propriedade pela qual um objeto esconde (encapsula) sua implementação interna, deixando conhecida apenas sua interface de comunicação.
B) Errada. Sobrecarga de método é a técnica que envolve criar vários métodos com o mesmo nome na mesma classe e implementações diferentes. A decisão de qual método seria executado seria feita verificando os parâmetros passados. Não é o caso dessa questão, visto que temos o mesmo método em classes diferentes, e eles são idênticos, inclusive os parâmetros esperados, dessa forma não se tratam de sobrecarga.
C) Errada. Abstração é um conceito da orientação a objetos que trata da capacidade de extrair dos atores/itens do contexto suas principais características, criando dessa forma, objetos.
D) Certa. Quando temos duas classes que herdam de um mesmo pai, e cada uma delas implementa um método de sua sorte, e em tempo de execução o programa decide qual implementação será usada conforme o tipo da classe filha, temos o polimorfismo.
E) Errada. Herança é o fato de uma classe filha herdar as características da classe pai. Isso, por si só, não garante a capacidade de se utilizar diferentes implementações do mesmo método.
Gabarito do Professor: Letra D.