Questão de Programação — C — Quadrix 2025
- Código
- qg600016
- Banca
- Quadrix
- Órgão
- CRO-SP
- Ano
- 2025
- Nível
- Superior
- Cargo
- Analista de Desenvolvimento de Sistemas de Informação
- CCerto
- EErrado
GabaritoC — Certo
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 |
| Nenhuma específica — apenas a assinatura diferente |
Exemplo |
|
|
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.
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.
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