Questão nº 67
Questão de Tecnologia da Informação · CESGRANRIO Transpetro PSP-RH-2018.1 (nº 67)
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á
- A0
- B5
- C6 (alternativa correta)
- D15
- E16
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
finallynão existisse, pois ocatchzerariaaebe oreturnencerraria. Mas ofinallyroda antes do retorno e soma 3 a cada variável. - (B) Incorreta: 5 não é possível, pois os valores de
aebsão sempre pares (10+5=15, depois 0+3=3, somando 6). - (C) Correta: O construtor de
ZBfaza=15eb=15. O métodofbb()chamafaa()(o sobrescrito em ZB). Comoa=15 > 10, lançaException, cai nocatchque zeraaebe executareturn. Mas ofinallyroda antes:a=0+3=3eb=0+3=3. Entãofbb()retorna3+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
aebfossem 8 cada, mas o fluxo com exceção efinallygera 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.