Questão de Programação — Plataforma Java — Quadrix 2025
- Código
- qg603654
- Banca
- Quadrix
- Órgão
- SEDF
- Ano
- 2025
- Nível
- Superior
- Cargo
- Professor de Educação Básica: Informática
- CCerto
- EErrado
GabaritoE — Errado
Gabarito: E — ERRADO. A instrução System.out.println("Valor total: " + p.calcularValorTotal()); não demonstra polimorfismo, pois o método calcularValorTotal() é chamado sobre um objeto de uma única classe (Produto), sem qualquer variação de comportamento baseada em herança ou sobrescrita. O polimorfismo exige que métodos de mesmo nome se comportem de forma diferente conforme a classe do objeto, o que não ocorre aqui — o valor retornado varia apenas por causa dos valores dos atributos, não por uma redefinição de método.
O polimorfismo é um dos pilares da programação orientada a objetos. Em termos simples, significa "muitas formas": a capacidade de um mesmo método (ou operador) se comportar de maneiras distintas dependendo do objeto que o invoca. Isso é alcançado, principalmente, por dois mecanismos: sobrescrita (override) — quando uma subclasse redefine um método da superclasse, e o comportamento é escolhido em tempo de execução (polimorfismo dinâmico) — e sobrecarga (overload) — quando métodos de mesmo nome possuem assinaturas diferentes (parâmetros distintos), e a escolha ocorre em tempo de compilação (polimorfismo estático).
No código apresentado, a classe Produto define o método calcularValorTotal(), que simplesmente retorna quantidade * preco. Não há herança envolvida, não há subclasses, não há redefinição de método. O método é chamado sobre uma única instância de Produto, e o resultado varia porque os valores dos atributos quantidade e preco são diferentes — mas isso é apenas a execução normal de um método, não polimorfismo. O polimorfismo não se manifesta pela variação de dados de entrada, mas pela variação de comportamento de métodos com o mesmo nome em classes diferentes.
Para ilustrar, considere uma hierarquia em que Carro e Bicicleta herdam de Veiculo e cada um redefine o método acelerar(). Ao chamar acelerar() sobre uma referência do tipo Veiculo, o comportamento será diferente conforme o objeto real seja um Carro ou uma Bicicleta — isso é polimorfismo. No código da questão, não há essa estrutura: calcularValorTotal() é um método único, sem variação de implementação.
A banca explora uma confusão comum: achar que qualquer variação de resultado (como a mudança de preco) caracteriza polimorfismo. Mas o polimorfismo diz respeito à estrutura de classes e à redefinição de métodos, não aos valores dos atributos. O valor retornado por calcularValorTotal() depende dos dados do objeto, mas o método em si é sempre o mesmo — não há múltiplas formas de comportamento.
A banca tenta induzir o candidato a confundir "comportamento diferente" (variação de resultado por causa dos valores dos atributos) com polimorfismo. O polimorfismo exige que o método tenha implementações diferentes em classes diferentes (por herança/sobrescrita) ou assinaturas diferentes (sobrecarga). Aqui, o método é único e não há herança — logo, não há polimorfismo. Fique atento: a variação de dados de entrada não é polimorfismo.
A afirmação está incorreta. O trecho System.out.println("Valor total: " + p.calcularValorTotal()); apenas invoca o método calcularValorTotal() sobre o objeto p da classe Produto. Não há polimorfismo porque:
Não há herança: Produto não estende nenhuma classe nem implementa interface com método redefinido.
Não há sobrescrita (override): o método calcularValorTotal() é definido uma única vez, sem variação de implementação.
Não há sobrecarga (overload): não existem outros métodos com o mesmo nome e assinaturas diferentes.
O comportamento do método é fixo: ele sempre retorna quantidade * preco. A variação do resultado decorre dos valores dos atributos, não de uma redefinição de método.
Portanto, a instrução demonstra apenas uma chamada de método comum, não polimorfismo.
Gabarito: E — ERRADO.
Link permanente: /questoes/qg603654