Questão de Programação — Programação Orientada a Objetos — FGV 2025
Programação›Programaçã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.Ao executar o código, o resultado impresso é
AA1.
BA2.
CA3.
DA4
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.
1Identificar classe instanciada (new)
2Verificar sobrescrita do método
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.