Comr elação ao programa anterior, é correto afirmar que a li...
01 class Prova{
02 public int a;
03
04 Prova(int _a){
05 a = _a;
06 }
07 public void acrescenta(int n){
08 a += n;
09 }
10 public void acrescenta(){
11 a++;
12 }
13 }
14 class SubProva extends Prova{
15 private int b;
16 SubProva(int umb, int uma){
17 super(uma);
18 b = umb;
19 }
20 public void acrescenta(int n){
21 b=b+n+2;
22 }
23 public static void main (String args[ ]) {
24 SubProva s = new SubProva(2,5);
25 Prova p = new Prova(2);
26 s.acrescenta(3);
27 p.acrescenta();
28 System.out.println(s.b+s.a);
29 System.out.println(p.a);
30 s.acrescenta();
31 System.out.println(" "+s.b+p.a+s.a) ;
32 }
33 }
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Gabarito: Alternativa D
Vamos analisar a questão para entender por que a alternativa correta é a D. Este problema envolve orientação a objetos, herança e sobrescrita de métodos. Para resolvê-lo, é necessário compreender como esses conceitos interagem no código.
O código fornecido define duas classes: Prova e SubProva, onde SubProva herda de Prova. Vamos detalhar a execução do código passo a passo:
Na linha 24, criamos uma instância de SubProva chamada s
com umb = 2
e uma = 5
. Isso chama o construtor de SubProva que, por sua vez, chama o construtor de Prova com uma = 5
. Assim, s.a = 5
e s.b = 2
.
Na linha 25, criamos uma instância de Prova chamada p
com _a = 2
. Portanto, p.a = 2
.
Na linha 26, chamamos s.acrescenta(3)
. Este método está sobrescrito em SubProva e executa b = b + n + 2
. Portanto, s.b = 2 + 3 + 2 = 7
.
Na linha 27, chamamos p.acrescenta()
. Este método incrementa p.a
em 1. Assim, p.a = 2 + 1 = 3
.
Na linha 28, o código imprime s.b + s.a
. Sabemos que s.b = 7
e s.a = 5
. Portanto, a saída é 7 + 5 = 12
, mas a linha 29 não tem relação com essa etapa.
Na linha 29, o código imprime p.a
. Após a linha 27, p.a
foi incrementado para 3. Portanto, a saída é 3, justificando a alternativa correta D.
Agora, vamos justificar as alternativas incorretas:
A - 4: Esta alternativa está incorreta porque p.a
se torna 3 após a chamada do método p.acrescenta()
.
B - 1: Esta alternativa está incorreta, pois p.a
foi inicializado com 2 e incrementado para 3 na linha 27.
C - 2: Esta alternativa está incorreta, pois p.a
foi incrementado de 2 para 3.
E - 0: Esta alternativa está incorreta porque p.a
nunca foi 0; foi inicializado com 2.
Espero que esta explicação tenha sido clara e útil. Se você tiver mais dúvidas ou precisar de mais detalhes, estou à disposição para ajudar!
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo