Questão nº 67

Questão de Tecnologia da Informação · CESGRANRIO Transpetro PSP-RH-2018.1 (nº 67)

CESGRANRIO2018Analista de Sistemas Júnior - InfraestruturaTecnologia da Informação
Gabarito: Cver comentário ↓

Considere as seguintes classes Java, que ocupam arquivos separados:

```java
public abstract class WA {
protected int a,b;
public WA() {
a=b=10;
}
public void faa() {
if(a < 10)
b=0;
else
a=0;
}
public abstract int fbb();
}
```

```java
public class ZB extends WA {
public ZB() {
a+=5;
b+=5;
}
public int fbb() {
faa();
return a+b;
}
public void faa() {
try {
if(a > 10)
throw new Exception();
}
catch(Exception e) {
a=b=0;
return;
}
finally {
a+=3;
b+=3;
}
}
}
```

```java
public class Main {

public static void main(String[] args) {
WA w=new ZB();
System.out.println(w.fbb());
}
}
```

Quando o método main() for executado, o console exibirá

Resposta comentada

Gabarito Alternativa C

Conceito-chave: Polimorfismo em Java faz o método executado ser o da classe real do objeto (ZB), não o da referência (WA). Além disso, o bloco finally sempre roda, mesmo com return no catch, alterando os valores antes da saída.

  • (A) Incorreta: 0 seria o resultado se o finally não existisse, pois o catch zeraria a e b e o return encerraria. Mas o finally roda antes do retorno e soma 3 a cada variável.
  • (B) Incorreta: 5 não é possível, pois os valores de a e b são sempre pares (10+5=15, depois 0+3=3, somando 6).
  • (C) Correta: O construtor de ZB faz a=15 e b=15. O método fbb() chama faa() (o sobrescrito em ZB). Como a=15 > 10, lança Exception, cai no catch que zera a e b e executa return. Mas o finally roda antes: a=0+3=3 e b=0+3=3. Então fbb() retorna 3+3=6.
  • (D) Incorreta: 15 seria o resultado se faa() não alterasse nada, mas ele altera para 3 e 3.
  • (E) Incorreta: 16 seria se a e b fossem 8 cada, mas o fluxo com exceção e finally gera 3 e 3.

Armadilha do distrator mais tentador (A): A banca testa se você esquece que o finally executa mesmo com return no catch. Muitos alunos veem o return e param, achando que o método termina ali, mas o finally é obrigatório e roda antes do retorno, somando 3 a cada variável.

Fonte: CESGRANRIO Transpetro PSP-RH-2018.1 Analista de Sistemas Júnior - Infraestrutura. 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