Questão nº 64

Questão de Tecnologia da Informação · CESGRANRIO BB 01/2022 (nº 64)

CESGRANRIO2022Escriturário - Agente de TecnologiaTecnologia da Informação
Gabarito: Bver comentário ↓

Sejam as seguintes classes Java, que ocupam arquivos separados:

```java
public class CAx {
protected int a;
protected int b;
public CAx() {
a=2;
b
=3;
}
{
a=1;
b=2;
}
public int op1(int x) {
return op2(x)+op3(x)+b;
}
public int op2(int x) {
return x+a;
}
public static int op3(int x) {
return x2;
}
}

public class CBy extends CAx {
protected int a;
public CBy() {
a+=3;
b+=3;
}
public int op2(int x) {
return x-a;
}
public static int op3(int x) {
return x
3;
}
}

public class Main {
public static void main(String[] args) {
CAx o=new CBy();
System.out.println(o.op1(2));
}
}
```

O que será exibido no console quando o método main for executado?

Resposta comentada

Gabarito Alternativa B

Conceito-chave: Em Java, métodos estáticos são resolvidos pelo tipo da variável (compilação), enquanto métodos de instância (não estáticos) são resolvidos pelo objeto real criado (polimorfismo). Além disso, atributos (campos) não são polimórficos: cada classe tem os seus, mesmo com o mesmo nome.

  • (A) Incorreta: 10 seria o resultado se op2 e op3 usassem os valores de a e b da classe CAx (a=1, b=2) e op3 fosse o estático de CAx (x*2), mas op2 é sobrescrito e op3 é estático resolvido pela referência CAx.
  • (B) Correta: O objeto real é CBy. O construtor de CAx roda primeiro: a (de CAx) = 12 = 2, b = 23 = 6. Depois o construtor de CBy: a (de CBy) = 0+3 = 3, b (herdado) = 6+3 = 9. No main, o é referência CAx, então op1 (não estático, herdado) executa com b=9. Dentro de op1, op2(x) é chamado polimorficamente no objeto CBy: retorna 2 - 3 = -1. op3(x) é estático, resolvido pela referência CAx: retorna 2*2 = 4. Logo, op1(2) = -1 + 4 + 9 = 12.
  • (C) Incorreta: 14 seria o resultado se op2 retornasse x+a com a=1 (de CAx) e op3 retornasse x*3 (estático de CBy), misturando regras de resolução.
  • (D) Incorreta: 18 seria o resultado se op2 retornasse x-a com a=3 (de CBy) e op3 retornasse x*2 (estático de CAx), mas b fosse 6 (sem o incremento do construtor de CBy).
  • (E) Incorreta: 20 seria o resultado se op2 retornasse x+a com a=2 (de CAx após construtor) e op3 retornasse x*3 (estático de CBy), ignorando a sobrescrita de op2 e o valor real de b.

Armadilha da banca: O distrator mais tentador é a letra D) 18, pois o aluno lembra do polimorfismo em op2 (usa a=3 de CBy) e do estático op3 de CAx (x*2), mas esquece que o construtor de CBy também soma 3 em b (que já era 6), resultando em b=9, não 6.

Fonte: CESGRANRIO BB 01/2022 Escriturário - Agente de Tecnologia (Caderno Gabarito 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