Alternativa D - Será acusado erro devido à redefinição do método "final" da classe "Alfa".
Explicação Didática
Este exercício testa o conhecimento sobre o uso da palavra-chave final em métodos de Java e as regras de herança (polimorfismo).
O Conceito de final em Métodos
Em Java, quando declaramos um método como final, estamos dizendo explicitamente ao compilador que este método não pode ser sobrescrito (override) pelas classes filhas. Isso é útil quando queremos garantir que o comportamento de um método permaneça inalterado em toda a hierarquia de classes.
$$ \text{Método Final} \Rightarrow \text{Não pode ser sobrescrito} $$
Análise do Código Apresentado
Vamos analisar a cadeia de herança passo a passo:
- Classe
Alfa: Define o método print() com o modificador final.
public final void print() { ... }
Significado: Esta implementação é fixa. Nenhuma classe que estender Alfa poderá criar uma nova versão deste método.
- Classe
Bravo: Estende Alfa. Ela herdará o método print como está, pois não tenta alterá-lo no código visível. - Classe
Charlie: Estende Bravo. Aqui ocorre o problema.
public class Charlie extends Bravo {
public void print() { ... } // Tentativa de redefinição
}
Ao tentar declarar um método print() com o mesmo nome e assinatura da classe pai (Alfa), o compilador gera um erro.
Por que a Alternativa D é a Correta?
- Erro de Compilação: O código não será executado porque falha na etapa de compilação.
- Motivo: A classe
Charlie está tentando redefinir (sobrescrever) um método que foi marcado como final na superclasse Alfa. - Conclusão: A alternativa D descreve exatamente a causa raiz do erro: a tentativa de redefinição de um método final.
Por que as outras estão erradas?
- A e B: Presumem que o programa roda e imprime algo. Como há erro de compilação, nada é impresso.
- C: Sugere que o erro é pela "falta do modificador final" na classe Charlie. Mesmo se
Charlie marcasse seu método como final, o erro persistiria, pois a restrição vem da classe pai (Alfa), não da classe filha. - E: A declaração de um método como
final na classe pai é sintaxe válida e correta em Java.
Portanto, a única opção que exprime corretamente o ocorrido é a Alternativa D.