Com relação ao programa anterior, é correto afirmar que:

Próximas questões
Com base no mesmo assunto
Q113171 Algoritmos e Estrutura de Dados

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 }

Com relação ao programa anterior, é correto afirmar que:
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Vamos analisar a questão sobre o código Java fornecido. O gabarito correto é a alternativa C: "a linha 31, ao executar o programa, a saída será '736'".

Para entender por que esta é a alternativa correta, precisamos analisar o código e o comportamento dos métodos envolvidos. Começaremos pela classe Prova.

Classe Prova:
- Possui um atributo público int a.
- O construtor Prova(int _a) inicializa a com o valor passado.
- O método acrescenta(int n) adiciona n ao valor de a.
- O método acrescenta() incrementa a em 1.

Agora, vejamos a classe SubProva:

Classe SubProva:
- Estende Prova, ou seja, herda seus atributos e métodos.
- Possui um atributo privado int b.
- O construtor SubProva(int umb, int uma) chama o construtor da superclasse Prova(uma) e inicializa b com umb.
- O método acrescenta(int n) é sobrescrito para somar n + 2 ao valor de b.

Com isso em mente, vamos analisar a execução do método main:

1. Linha 24: Instancia um objeto SubProva s com b = 2 e a = 5.
2. Linha 25: Instancia um objeto Prova p com a = 2.
3. Linha 26: Chama s.acrescenta(3), atualizando b para 2 + 3 + 2 = 7.
4. Linha 27: Chama p.acrescenta(), incrementando a para 2 + 1 = 3.
5. Linha 28: Imprime s.b + s.a, que é 7 + 5 = 12.
6. Linha 29: Imprime p.a, que é 3.
7. Linha 30: Chama s.acrescenta(), incrementando a para 5 + 1 = 6.
8. Linha 31: Imprime " " + s.b + p.a + s.a, que resulta em " 7" + 3 + 6 = "736".

Vamos agora explicar por que as outras alternativas estão incorretas:

Alternativa A: A saída seria 8, mas a linha 31 imprime "736".
Alternativa B: A saída seria 16, mas a linha 31 imprime "736".
Alternativa D: A saída seria 10, mas a linha 31 imprime "736".
Alternativa E: Está incorreta porque, mesmo sendo private, o campo s.b pode ser acessado dentro da classe SubProva.

Espero que essa explicação tenha ajudado a entender melhor o funcionamento do código e a justificativa para a alternativa correta. Se precisar de mais esclarecimentos, estou à disposição!

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Essa questão é uma leve pegadinha, pois se fosse somente s.b+p.a+s.a, seria 16. Mas como possui o " "+s.b+p.a+s.a, acaba concatenando então se torna 736.

Galera, rodem o código em algum compilador online, por que não é a e)? o b é privado, dá erro na linha 28!

public class Prova{

public int a;

Prova(int _a){

 a = _a;

 }

 public void acrescenta(int n){

 a += n;

 }

 public void acrescenta(){

 a++;

 }

 }

 class SubProva extends Main{

 private int b;

 SubProva(int umb, int uma){

 super(uma);

 b = umb;

 }

 public void acrescenta(int n){

 b=b+n+2;

 }

 public static void main(String[] args) {

 SubProva s = new SubProva(2,5);

 Prova p = new Prova(2);

 s.acrescenta(3);

 p.acrescenta();

 System.out.println(s.b+s.a);

 System.out.println(p.a);

 s.acrescenta();

 System.out.println(" "+s.b+p.a+s.a) ;

 }

 }

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo