As classes Java a seguir pertencem ao pacote default e foram...
O que será exibido no console quando o método main for executado?
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