Questão nº 64
Questão de Tecnologia da Informação · CESGRANRIO BB 01/2022 (nº 64)
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 x3;
}
}
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?
- A10
- B12 (alternativa correta)
- C14
- D18
- E20
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
op2eop3usassem os valores deaebda classeCAx(a=1, b=2) eop3fosse o estático deCAx(x*2), masop2é sobrescrito eop3é estático resolvido pela referênciaCAx. - (B) Correta: O objeto real é
CBy. O construtor deCAxroda primeiro:a(deCAx) = 12 = 2,b= 23 = 6. Depois o construtor deCBy:a(deCBy) = 0+3 = 3,b(herdado) = 6+3 = 9. Nomain,oé referênciaCAx, entãoop1(não estático, herdado) executa comb=9. Dentro deop1,op2(x)é chamado polimorficamente no objetoCBy: retorna2 - 3 = -1.op3(x)é estático, resolvido pela referênciaCAx: retorna2*2 = 4. Logo,op1(2) = -1 + 4 + 9 = 12. - (C) Incorreta: 14 seria o resultado se
op2retornassex+acoma=1(deCAx) eop3retornassex*3(estático deCBy), misturando regras de resolução. - (D) Incorreta: 18 seria o resultado se
op2retornassex-acoma=3(deCBy) eop3retornassex*2(estático deCAx), masbfosse 6 (sem o incremento do construtor deCBy). - (E) Incorreta: 20 seria o resultado se
op2retornassex+acoma=2(deCAxapós construtor) eop3retornassex*3(estático deCBy), ignorando a sobrescrita deop2e o valor real deb.
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.