Questão de Programação — Linguagens de programação — CESPE / CEBRASPE 2023
Programação›Linguagens de programação
Código
ce163368
Banca
CESPE / CEBRASPE
Órgão
TBG
Ano
2023
Nível
Superior
Cargo
Ênfase: Desenvolvimento de Software
Tendo 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.
CCerto
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.