Pular para o conteúdo principal

Questão de Programação — Plataforma Java — Quadrix 2025

ProgramaçãoPlataforma Java
Código
qg603654
Banca
Quadrix
Órgão
SEDF
Ano
2025
Nível
Superior
Cargo
Professor de Educação Básica: Informática
O professor André ministra uma disciplina de Desenvolvimento Web em Java EE para alunos de nível superior. Ele solicita que os estudantes implementem um sistema simplificado de cadastro de produtos, utilizando J2EE, que inclui tipos de dados elementares e estruturados, métodos (funções e procedimentos) e estruturas de controle de fluxo. Parte do código desenvolvido é apresentada a seguir.


public class Produto {
    private String nome;
    private int quantidade;
    private double preco;
 
public Produto(String nome, int quantidade, double preco) {
    this.nome = nome;
    this.quantidade = quantidade;
    this.preco = preco;
 }

public double calcularValorTotal() {
 return quantidade * preco;
 }

  public void aplicarDesconto(double percentual) {
      if(percentual > 0 & percentual < 100) {
        preco ‑= preco * percentual / 100;
     } else {
         System.out.println(“Percentual inválido”);
   }
 }

  public static void main(String[] args) {
       Produto p = new Produto(“Notebook”, 5, 4500.00);
       p.aplicarDesconto(10);
       System.out.println(“Valor total: “ + p.calcularValorTotal());
    }
}
A respeito do código Java apresentado, julgue o item seguinte. A instrução System.out.println(“Valor total: “ + p.calcularValorTotal()); demonstra polimorfismo, pois o método calcularValorTotal() se comporta de forma diferente dependendo do valor do atributo preco.
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoE — Errado

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

Polimorfismo em Java: o que a instrução System.out.println demonstra

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.

NÃO CAIA NESSA!

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.

1Sobrescrita (override)
Subclasse redefine método da superclasse
Escolha em tempo de execução
2Sobrecarga (overload)
Mesmo nome, assinaturas diferentes
Escolha em tempo de compilação
3Requisitos
Herança ou interface
Redefinição de método
4Não é polimorfismo
Variação de valores de atributos
Chamada de método único
Polimorfismo
LEVELsoulevel.com.br
Polimorfismo: Sobrescrita (override) (Subclasse redefine método da superclasse, Escolha em tempo de execução); Sobrecarga (overload) (Mesmo nome, assinaturas diferentes, Escolha em tempo de compilação); Requisitos (Herança ou interface, Redefinição de método); Não é polimorfismo (Variação de valores de atributos, Chamada de método único)

Item — ❌ ERRADO

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