Pular para o conteúdo principal

Questão de Programação — Linguagens de programação — CESPE / CEBRASPE 2023

ProgramaçãoLinguagens de programação
Código
ce163368
Banca
CESPE / CEBRASPE
Órgão
TBG
Ano
2023
Nível
Superior
Cargo
Ênfase: Desenvolvimento de Software
Imagem associada para resolução da questãoTendo como referência o programa precedente, escrito em Java, julgue o item a seguir, relativo à programação orientada a objetos.A sintaxe e a lógica do programa apresentado mostram corretamente uma forma de polimorfismo do tipo override.
  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: override × overload

Gabarito: ERRADO (letra E). A afirmação está incorreta porque o polimorfismo do tipo override (sobrescrita) exige que um método de uma subclasse redefina um método da superclasse com a mesma assinatura (mesmo nome, mesmos parâmetros e mesmo tipo de retorno). O programa apresentado, porém, mostra um caso de overload (sobrecarga), em que métodos de mesmo nome possuem listas de parâmetros diferentes — o que caracteriza polimorfismo do tipo overload, não override.

O polimorfismo é um dos pilares da programação orientada a objetos e se manifesta de duas formas principais em Java: override (sobrescrita) e overload (sobrecarga). O override ocorre quando uma subclasse redefine um método herdado da superclasse, mantendo a mesma assinatura — é a base do polimorfismo dinâmico, pois a decisão de qual método executar acontece em tempo de execução, conforme o tipo real do objeto. Já o overload ocorre quando uma mesma classe (ou classe relacionada) define vários métodos com o mesmo nome, mas com parâmetros diferentes — a decisão de qual método chamar é tomada em tempo de compilação, com base nos argumentos passados.

Para entender a diferença na prática, imagine uma classe Calculadora com dois métodos somar(int a, int b) e somar(double a, double b). Isso é overload: mesmo nome, assinaturas diferentes. Agora imagine uma classe Animal com o método emitirSom() e uma subclasse Cachorro que redefine emitirSom() com a mesma assinatura — isso é override. A confusão entre esses dois conceitos é uma das pegadinhas mais frequentes em provas de programação, pois ambos envolvem métodos com o mesmo nome, mas diferem radicalmente no mecanismo e na finalidade.

A banca explora exatamente essa confusão: o programa mostra métodos com o mesmo nome e parâmetros distintos, o que é overload, mas o enunciado afirma que é override. O candidato que não domina a distinção entre os dois conceitos tende a marcar "Certo", caindo na armadilha. Guarde o critério decisivo: override = mesma assinatura, herança, redefinição; overload = mesma classe, assinaturas diferentes, sobrecarga.

Critério

Override (sobrescrita)

Overload (sobrecarga)

Assinatura do método

Mesma (nome, parâmetros e retorno)

Mesmo nome, mas parâmetros diferentes

Relação entre classes

Exige herança (subclasse × superclasse)

Pode ocorrer na mesma classe

Resolução

Dinâmica (tempo de execução)

Estática (tempo de compilação)

Anotação típica

@Override (opcional)

Não há anotação específica

Polimorfismo em Java
  • 1Override (sobrescrita)
    • Mesma assinatura
    • Herança entre classes
    • Resolução em tempo de execução
  • 2Overload (sobrecarga)
    • Mesmo nome, parâmetros diferentes
    • Pode ocorrer na mesma classe
    • Resolução em tempo de compilação
LEVEL · soulevel.com.br

Alternativa E — ❌ Errada ⟵ GABARITO

A alternativa está errada porque o programa apresentado não demonstra override, mas sim overload. O override (sobrescrita) exige que um método de uma subclasse redefina um método da superclasse com a mesma assinatura — mesmo nome, mesmos tipos e quantidade de parâmetros, e mesmo tipo de retorno (ou um subtipo, no caso de covariância). O programa, ao contrário, apresenta métodos com o mesmo nome, porém com listas de parâmetros diferentes, o que caracteriza overload (sobrecarga).

A confusão entre os dois conceitos é o erro central: o candidato vê métodos com o mesmo nome e conclui que há override, mas a assinatura diferente desqualifica essa interpretação. O override é um mecanismo de polimorfismo dinâmico (resolução em tempo de execução), enquanto o overload é um mecanismo de polimorfismo estático (resolução em tempo de compilação).

PEGA ESSA DICA!

Para diferenciar rapidamente na prova, verifique a assinatura dos métodos: se os parâmetros são iguais, é override (desde que haja herança); se os parâmetros diferem, é overload. O override também exige a anotação @Override (opcional, mas recomendada) e ocorre entre classes com relação de herança, enquanto o overload pode ocorrer na mesma classe.

Gabarito: letra E (ERRADO).

Link permanente: /questoes/ce163368