As classes Java a seguir pertencem ao pacote default e foram...

Próximas questões
Com base no mesmo assunto
Q1845301 Programação
As classes Java a seguir pertencem ao pacote default e foram incluídas no arquivo Main.java.
Imagem associada para resolução da questão

O que será exibido no console quando o método main for executado?
Alternativas

Comentários

Veja os comentários dos nossos alunos

GAB E

Questão meio difícil para quem não é javeiro

Ordem:

  • Atributos estáticos
  • Blocos estáticos
  • Atributos de instância
  • Blocos de instância
  • Construtor

Para cada item, verificar a classe pai e depois a classe filha

No meu caso, a ordem de execução foi diferente, tanto no debugger pelo Eclipse, quanto no site de compilador online.

(https://www.jdoodle.com/online-java-compiler/)

1) Bloco estático da classe pai

2) Bloco estático da classe filha

3) Bloco anônimo/instância da classe pai

4) Construtor classe pai

5) Bloco anônimo/instância da classe filha

6) Construtor classe filha

Quem quiser testar o código no debugger:

class MnopA {

static int x = 10, y = 10, z = 10;

public MnopA() {

x*=2;

}

{

y+=5;

z+=10;

}

static {

x=y=z=1;

}

}

class MnopB extends MnopA {

public MnopB (int c) {

y*= c;

}

{

z+=y;

}

static {

x=y=z=1;

}

}

public class Main {

public static void main(String[] args) {

MnopB o = new MnopB(2);

System.out.println(MnopB.x);

System.out.println(MnopB.y);

System.out.println(MnopB.z);

}

}

Conforme os colegas explicaram, a ordem é:

1) Bloco estático da classe pai ( static int x=10,y=10,z=10;) --> você não fará nada, pois não tem ação descrita aqui.

2) Bloco estático da classe filha (x=y=z=1) --> guarda essa informação pois e é a partir desse valor para x,y e z que você iniciará seus cálculos.

3) Bloco anônimo/instância da classe pai(y+=5; z+=10;) --> y = 6 e Z =11 --> ou seja, aqui você usou o valor 1 para y e z.

4) Construtor classe pai ( x*=2;) --> x =2 --> pois X=1 então X*2 = 2

5) Bloco anônimo/instância da classe filha (z+=y; ) z=17 --> pois, Z era 11 e Y era 6 , então Z+Y = 17

6) Construtor classe filha(y*=c;) y = 6*2 --> pois Y era 6 e C era 2 que veio do MnopB(2) então Y=12

Somando X, Y e Z de MnopB, dá 31.

o que eu não entendi é que quando temos um método ou variável estática na classe filha e na classe pai. Qual é a que vale? Aqui parece que a que vale é a da classe filha x=y=z=1 pq ele usa esses valores mesmo dentro do bloco do pai, mas eu tinha visto outra questão que era o contrário. Fiquei na dúvida agora.

Olá Nathalia, provavelmente você não precisa mais da minha ajuda, mas funciona assim: Atributos podem ser sobrescritos, mas métodos não.

Atributo não tem parênteses, que é o caso dessa questão, é apenas z=1, por exemplo.

Métodos recebem parâmetro, ou seja, têm parênteses, que é o caso da outra questão (https://www.qconcursos.com/questoes-de-concursos/questoes/b88ea552-25)

Clique para visualizar este comentário

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