Considere a seguinte figura:

O termo polimorfismo é originário do grego e significa "muitas formas". Na orientação a objetos, isso significa que um mesmo tipo de objeto, sob certas condições, pode realizar ações diferentes ao receber uma mesma mensagem. Ou seja, apenas olhando o código fonte não sabemos exatamente qual será a ação tomada pelo sistema, sendo que o próprio sistema é quem decide qual método será executado, dependendo do contexto durante a execução do programa. Desta forma, a mensagem "fale" enviada a um objeto da classe Animal pode ser interpretada de formas diferentes, dependendo do objeto em questão. Para que isto ocorra, é preciso que duas condições sejam satisfeitas: exista herança de uma classe abstrata e casting. Qual dos seguintes itens define classe abstrata?