Pular para o conteúdo principal

Questão de Programação — C — Quadrix 2025

ProgramaçãoC
Código
qg600016
Banca
Quadrix
Órgão
CRO-SP
Ano
2025
Nível
Superior
Cargo
Analista de Desenvolvimento de Sistemas de Informação
Durante o desenvolvimento de um sistema de gestão odontológica para uma clínica de médio porte, a equipe de tecnologia optou por criar uma aplicação multiplataforma com recursos de agendamento, prontuário eletrônico e geração de relatórios financeiros. Para isso, diferentes módulos foram desenvolvidos em C#, Python e Java, aproveitando as características específicas de cada linguagem.Com base nessa situação hipotética e nos conhecimentos a respeito de sintaxe, tipos de dados, estruturas de controle, classes, herança e polimorfismo em C#, Python e Java, julgue o item a seguir.Em C#, é possível definir uma classe base chamada Pessoa e utilizar a palavra‑chave override para sobrescrever o método ToString() em uma classe Paciente, respeitando o conceito de polimorfismo.
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

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 C#: sobrescrita do método ToString()

Gabarito: ✅ CERTO. Em C#, toda classe deriva, direta ou indiretamente, de System.Object, que define o método virtual ToString(). Uma classe derivada (como Paciente) pode sobrescrever esse método usando a palavra-chave override, desde que a classe base (como Pessoa) declare o método como virtual — e é exatamente isso que caracteriza o polimorfismo por inclusão (sobrescrita/overriding). A afirmação está correta.

O polimorfismo é um dos pilares da programação orientada a objetos e significa, literalmente, "muitas formas" (do grego poli = muitas, morphos = formas). Na prática, ele permite que objetos de classes diferentes respondam à mesma chamada de método de maneiras distintas, conforme a implementação específica de cada classe. No contexto da questão, temos uma classe base Pessoa e uma classe derivada Paciente. Se Pessoa declara o método ToString() como virtual, a classe Paciente pode usar override para fornecer sua própria implementação. Quando uma referência do tipo Pessoa aponta para um objeto Paciente, a chamada a ToString() executará a versão da classe Paciente — isso é polimorfismo em ação.

É importante distinguir os dois tipos principais de polimorfismo que aparecem em provas:

Critério

Polimorfismo por Inclusão (Sobrescrita / Overriding)

Polimorfismo Ad-Hoc (Sobrecarga / Overloading)

Como ocorre

Redefinição de um método da superclasse na subclasse

Dois ou mais métodos com o mesmo nome, mas assinaturas diferentes (parâmetros diferentes)

Vínculo

Dinâmico (em tempo de execução)

Estático (em tempo de compilação)

Palavra-chave

override (na subclasse) e virtual (na superclasse)

Nenhuma específica — apenas a assinatura diferente

Exemplo

Paciente sobrescreve ToString() de Pessoa

Calcular(int a) e Calcular(double a)

A pegadinha que a banca explora aqui é justamente a confusão entre override e overload. O candidato que não domina a diferença pode achar que a afirmação está errada, pensando que override é usado apenas para sobrecarga. Mas não: override é a palavra-chave correta para sobrescrever um método virtual da classe base, e ToString() é um método virtual de System.Object que pode (e frequentemente deve) ser sobrescrito para fornecer uma representação textual significativa do objeto. A questão testa exatamente esse conhecimento técnico.

Guarde a fronteira: sobrescrita (override) = polimorfismo por inclusão, com vínculo dinâmico; sobrecarga (overload) = polimorfismo ad-hoc, com vínculo estático. É nessa distinção que a questão se resolve.

Item — ✅ CERTO

A afirmação está correta. Em C#, System.Object é a raiz de toda a hierarquia de classes, e o método ToString() é declarado como virtual nessa classe. Portanto, qualquer classe derivada pode sobrescrevê-lo usando a palavra-chave override. No cenário descrito, Pessoa é a classe base e Paciente é a classe derivada. Para que Paciente possa sobrescrever ToString(), a classe Pessoa deve declarar o método como virtual (ou herdar a versão virtual de System.Object). Ao usar override em Paciente, a nova implementação substitui a da classe base, e chamadas polimórficas a ToString() em uma referência do tipo Pessoa apontando para um objeto Paciente executarão a versão de Paciente. Isso respeita plenamente o conceito de polimorfismo por inclusão.

NÃO CAIA NESSA!

A banca explora a confusão entre override (sobrescrita) e overload (sobrecarga). Muitos candidatos acham que override é usado apenas para sobrecarga, mas não: override é a palavra-chave para sobrescrever um método virtual da classe base, e ToString() é um método virtual de System.Object que pode ser sobrescrito. Com treino, você enxerga essa distinção de longe 💪.

Gabarito: ✅ CERTO.

Link permanente: /questoes/qg600016