Geral Múltipla Escolha

Um aluno está aprendendo Java e escreveu os códigos em Java mostrados a seguir: Sobre esse programa, marque a única opção que exprime corretamente o que ocorrerá na execução:

Um aluno está aprendendo Java e escreveu os códigos em Java mostrados a seguir:

public class Alfa {
  public final void print() {
    System.out.println("Hello World!");
  }
}

public class Bravo extends Alfa {
  // código ocultado
}

public class Charlie extends Bravo {
  public void print() {
    System.out.println("Ola, Mundo!");
  }
}

public class Principal {
  public static void main(String[] args) {
    Charlie c = new Charlie();
    c.print();
  }
}

Sobre esse programa, marque a única opção que exprime corretamente o que ocorrerá na execução:

  1. Será impresso "Hello World!".
  2. Será impresso "Ola, Mundo!".
  3. Será acusado erro na linha 2 da classe "Charlie" devido à falta do modificador "final".
  4. Será acusado erro devido à redefinição do método "final" da classe "Alfa".
  5. Será acusado erro na linha 1 da classe "Alfa" devido à falta do modificador "final".

Resolução completa

Explicação passo a passo

D
Alternativa D

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:

  1. 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.

  1. Classe Bravo: Estende Alfa. Ela herdará o método print como está, pois não tenta alterá-lo no código visível.
  2. 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.

Tem outra questão para resolver?

Resolver agora com IA

Mais questões de Geral

Ver mais Geral resolvidas

Tem outra questão de Geral?

Cole o enunciado, tire uma foto ou descreva o problema — a IA resolve com explicação completa em segundos.