Alternativa C - Reescrita de métodos
Análise da Questão
A questão aborda um conceito fundamental da Programação Orientada a Objetos (POO): o Polimorfismo, focando especificamente na sua implementação na linguagem Java.
1. O Conceito-Chave: Tempo de Execução
O enunciado traz uma pista crucial: "comportamento é determinado em tempo de execução". No universo da POO, existem dois tipos principais de polimorfismo:
- Polimorfismo Estático (Compile-time): Decidido antes do programa rodar. Exemplo: Sobrecarga de métodos (Overloading).
- Polimorfismo Dinâmico (Run-time): Decidido enquanto o programa está rodando. Exemplo: Reescrita de métodos (Overriding).
2. Por que a Alternativa C é a Correta?
A Reescrita de Métodos (conhecida tecnicamente como Method Overriding) permite que uma subclasse forneça uma implementação específica para um método já definido em sua superclasse.
Quando você invoca esse método através de uma referência do tipo da superclasse, mas que aponta para um objeto da subclasse, o sistema operacional/JVM verifica qual é o tipo real do objeto naquele momento exato (tempo de execução) e executa a versão correta do método.
Exemplo Prático:
\begin{array}{|l|}
\hline
\textbf{Classe Animal} \\
\hline
\text{void falar() \{ System.out.println("Som genérico"); \}} \\
\hline
\end{array}
\Rightarrow
\begin{array}{|l|}
\hline
\textbf{Classe Cachorro extends Animal} \\
\hline
\text{void falar() \{ System.out.println("Au Au"); \}} \\
\hline
\end{array}
Se fizermos Animal meuPet = new Cachorro();, o comando meuPet.falar() executará "Au Au" porque o tipo real é Cachorro. Isso só é possível graças à reescrita.
3. Por que as outras estão incorretas?
- A) Herança de classe: Embora a herança seja necessária para criar a hierarquia onde o polimorfismo ocorre, ela é apenas o meio de acesso aos membros, não o mecanismo de decisão do comportamento em runtime.
- **B) Sobrecarga de métodos (Overloading): Ocorre quando múltiplos métodos têm o mesmo nome, mas assinaturas diferentes (parâmetros distintos). O compilador resolve isso em tempo de compilação**, não de execução.
- D) Composição de objetos: Refere-se a construir classes complexas combinando instâncias de outras classes, não sendo o mecanismo central do polimorfismo dinâmico.
- E) Declaração de variáveis: É uma sintaxe básica e não define o comportamento polimórfico.
Portanto, a descrição de como o Java implementa o polimorfismo determinado em tempo de execução é a Reescrita de métodos.