Questão nº 22

Questão de Tecnologia da Informação · FCC TRE-PR 2017 (nº 22)

FCC2017Técnico Judiciário - Área Apoio Especializado - Especialidade Programação de SistemasTecnologia da Informação
Gabarito: Dver comentário ↓

Um desenvolvedor Java SE possui, em uma aplicação, duas subclasses B e C, estendendo a mesma superclasse A. Na superclasse A há um método calcularValor, também presente nas duas subclasses B e C, mas implementado de maneiras diferentes. A partir do método main de uma classe principal, utilizou-se o seguinte bloco de código:

```
A t1 = new A();
System.out.println(t1.calcularValor());
A t2 = new B();
System.out.println(t2.calcularValor());
A t3 = new C();
System.out.println(t3.calcularValor());
```

Após compilar e executar a aplicação, foram exibidos na tela os valores 4, 9 e 5. Nessa aplicação evidencia-se o uso de

Resposta comentada

Gabarito Alternativa D

Polimorfismo é a capacidade de um objeto assumir diferentes formas, permitindo que um mesmo método se comporte de maneiras distintas dependendo do tipo real do objeto que o executa, mesmo quando referenciado por um tipo mais genérico (sua superclasse).

(A) Incorreta: Sobrecarga de métodos (overloading) ocorre quando há múltiplos métodos com o mesmo nome, mas com assinaturas diferentes (número, tipo ou ordem dos parâmetros) dentro da mesma classe ou em classes relacionadas. O problema descreve um método `calcularValor` com a mesma assinatura em `A`, `B` e `C`, mas com implementações diferentes, o que é característica de sobrescrita (overriding), não sobrecarga. Armadilha da banca: A confusão entre "sobrecarga" e "sobrescrita" é comum, mas são conceitos distintos. Sobrecarga é definida em tempo de compilação, enquanto a sobrescrita (que leva ao polimorfismo) é resolvida em tempo de execução.
(B) Incorreta: Métodos abstratos são declarados sem implementação em uma classe abstrata e devem ser implementados pelas subclasses. Embora `calcularValor` possa ter sido abstrato em `A`, o código `A t1 = new A();` indica que `A` é uma classe concreta (pode ser instanciada), e não abstrata.
(C) Incorreta: Métodos estáticos pertencem à classe, não à instância, e são chamados usando o nome da classe (ex: `A.calcularValor()`). Eles não podem ser sobrescritos da mesma forma que métodos de instância; se uma subclasse define um método estático com o mesmo nome, é considerado "ocultação de método" (method hiding), e a chamada é resolvida pelo tipo da referência, não pelo tipo do objeto. O código chama o método em instâncias (`t1.calcularValor()`, `t2.calcularValor()`, etc.).
(D) Correta: O código demonstra polimorfismo através da sobrescrita de métodos (method overriding). Uma referência do tipo da superclasse `A` (`t2` e `t3`) aponta para objetos de suas subclasses `B` e `C`, respectivamente. Ao chamar o método `calcularValor()` nessas referências, o Java executa a implementação específica da subclasse (B ou C), e não a da superclasse A, resultando em saídas diferentes (9 e 5) para a mesma chamada de método. Isso é o comportamento polimórfico: o método `calcularValor()` assume "muitas formas" dependendo do tipo real do objeto.
(E) Incorreta: Sobrecarga de construtor ocorre quando uma classe tem múltiplos construtores com diferentes listas de parâmetros. O trecho de código lida com a execução de um método (`calcularValor`), não com a criação de objetos ou construtores.

Fonte: FCC TRE-PR 2017 Técnico Judiciário - Área Apoio Especializado - Especialidade Programação de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho