Considere o seguinte trecho de código em Java.  Considerando...

Próximas questões
Com base no mesmo assunto
Q3291021 Programação
Considere o seguinte trecho de código em Java.  

Captura_de tela 2025-04-11 153544.png (560×450)

Considerando os conceitos de orientação a objetos e que o código será compilado e executado em condições ideais, é correto afirmar que 
Alternativas

Comentários

Veja os comentários dos nossos alunos

1ª linha da saída:

  • nproc é do tipo A, e está instanciado como new A()
  • Vai chamar o método processo(String param) da classe A
  • Saída: "A: teste"

2ª linha da saída:

  • Aqui tentamos fazer casting de um objeto da classe A para a classe B
  • Só que nproc foi criado com new A() — ele não é um objeto da classe B
  • Esse cast vai compilar, mas em tempo de execução causará erro

Alternativa Correta: E

Acho controversa a explicação, o cast não funciona não por nproc não ser um objeto da classe B, mas por não ser derivado de B. Se for de qualquer subclasse de B vai funcionar, e não me parece que se use como o padrão dizer que um objeto da classe derivada seja da classe originária.

Linha 1:

  • Cria um objeto da classe A (não de B!), com referência do tipo A.

Linha 2:

  • Chama o método no objeto que é uma instância de A.
  • Como o objeto real é A (não B), executa o método de A → retorna .

Linha 3:

  • Aqui está o ponto crítico: tenta fazer um downcast de (que é realmente uma instância de A) para B.
  • Em Java, o cast compila normalmente (pois B é subclasse de A, então é sintaticamente válido).
  • Porém, em tempo de execução, a JVM verifica se o objeto realmente é uma instância de B. Como foi criado como , ele NÃO é instância de B.
  • Isso lança uma em tempo de execução.

Avaliando as alternativas:

  • A, B, C: Estão erradas porque o programa não chegará a imprimir a segunda linha (lançará exceção antes).
  • D: Errada. O código compila normalmente — o cast entre A e B é sintaticamente válido (são classes relacionadas por herança).
  • E: Correta. O código compila, mas lança em tempo de execução, porque foi instanciado como e não pode ser convertido para B.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo