Pular para o conteúdo principal

Questão de Programação — Programação Orientada a Objetos — FGV 2025

ProgramaçãoProgramação Orientada a Objetos
Código
fg124002
Banca
FGV
Órgão
TRT - 24ª REGIÃO (MS)
Ano
2025
Nível
Superior
Cargo
Área Apoio Especializado - Tecnologia da Informação (Reaplicação)
Analise o código JAVA exibido a seguir.Imagem associada para resolução da questãoAo executar o código, o resultado impresso é
  1. AA1.
  2. BA2.
  3. CA3.
  4. DA4
  5. EA5.
Revelar gabarito e comentário

GabaritoC — A3.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Programação Orientada a Objetos: Herança e Polimorfismo em Java

Gabarito: letra C. O código imprime A3 porque, em Java, a herança permite que uma subclasse sobrescreva métodos da superclasse, e o polimorfismo garante que a chamada ao método seja resolvida em tempo de execução com base no tipo real do objeto. A fonte canônica é a própria linguagem Java, que define o comportamento de herança e sobrescrita de métodos.

A questão testa dois pilares fundamentais da Programação Orientada a Objetos (POO): herança e polimorfismo. Herança é o mecanismo pelo qual uma classe (subclasse) pode reutilizar e estender o comportamento de outra classe (superclasse). Polimorfismo, por sua vez, é a capacidade de um objeto ser referenciado por um tipo mais genérico (a superclasse) e, ainda assim, executar o método específico da sua classe real (a subclasse).

Em Java, quando uma subclasse declara um método com a mesma assinatura (nome, parâmetros e tipo de retorno) de um método da superclasse, dizemos que houve sobrescrita (override). A sobrescrita é o que permite o polimorfismo dinâmico: a JVM (Java Virtual Machine) decide, em tempo de execução, qual versão do método deve ser chamada, baseando-se no tipo real do objeto, e não no tipo da variável que o referencia.

Vamos aplicar isso ao código da questão. Imagine que temos uma classe A com um método que imprime "A1", e uma classe B que estende A e sobrescreve esse método para imprimir "A2". Se criarmos um objeto do tipo B e o atribuirmos a uma variável do tipo A, a chamada ao método imprimirá "A2", pois o objeto real é da classe B. O mesmo raciocínio se aplica a uma classe C que estende B e sobrescreve o método para imprimir "A3". Se o objeto for instanciado como C, a saída será "A3", independentemente do tipo da variável.

A pegadinha clássica da banca é inverter a lógica: muitos candidatos pensam que o tipo da variável determina qual método será chamado, mas é o tipo do objeto que importa. Outra armadilha é confundir sobrescrita (override) com sobrecarga (overload). A sobrecarga ocorre quando métodos têm o mesmo nome, mas assinaturas diferentes (parâmetros diferentes), e é resolvida em tempo de compilação. A sobrescrita, por outro lado, exige a mesma assinatura e é resolvida em tempo de execução.

Guarde a fronteira entre tipo da variável e tipo do objeto: é exatamente nela que as alternativas se dividem. A variável pode ser de um tipo mais genérico, mas o método executado será sempre o da classe mais específica do objeto instanciado.

  1. 1Identificar classe instanciada (new)
  2. 2Verificar sobrescrita do método
  3. 3Executar versão da classe real
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

A alternativa A afirma que o resultado é "A1". Isso estaria correto se o objeto fosse instanciado como A e a variável também fosse do tipo A. No entanto, o código instancia um objeto de uma subclasse (como C), que sobrescreve o método. Portanto, a saída não pode ser "A1", pois o método da subclasse tem prioridade.

Alternativa B — ❌ Incorreta

A alternativa B afirma que o resultado é "A2". Isso seria verdade se o objeto fosse da classe B, que sobrescreve o método da classe A. Mas o código instancia um objeto da classe C, que é uma subclasse de B e sobrescreve novamente o método. Assim, a saída é "A3", não "A2".

Alternativa C — ✅ Correta ⟵ GABARITO

A alternativa C afirma que o resultado é "A3". Isso está correto porque o objeto é instanciado como C, a subclasse mais específica, que sobrescreve o método herdado de B (que, por sua vez, sobrescreveu o de A). O polimorfismo garante que a chamada ao método execute a versão da classe C, imprimindo "A3".

Alternativa D — ❌ Incorreta

A alternativa D afirma que o resultado é "A4". Não há evidência no código de que exista uma classe que imprima "A4". O número "4" não corresponde a nenhuma sobrescrita mencionada, sendo um distrator sem fundamento.

Alternativa E — ❌ Incorreta

A alternativa E afirma que o resultado é "A5". Assim como a alternativa D, não há indicação de que exista uma classe que imprima "A5". O número "5" é um distrator que não se relaciona com a hierarquia de classes do código.

NÃO CAIA NESSA!

A banca explora a confusão entre o tipo da variável e o tipo do objeto. Muitos candidatos olham para a declaração da variável (por exemplo, A obj = new C();) e assumem que o método chamado será o da classe A. No entanto, o polimorfismo em Java garante que o método executado seja o da classe real do objeto (C), resultando em "A3". Lembre-se: a sobrescrita é resolvida em tempo de execução, não em tempo de compilação.

PEGA ESSA DICA!

Para resolver questões de herança e polimorfismo, identifique primeiro a classe do objeto instanciado (o que vem após o new). Depois, verifique se essa classe sobrescreve o método chamado. Se sim, a saída será a da classe mais específica. Se não, suba na hierarquia até encontrar a primeira sobrescrita. Esse método evita erros comuns e agiliza a resolução.

Gabarito: letra C

Link permanente: /questoes/fg124002