Duvida sobre inicialização na declaração de atributos

3 respostas
Naruffy

Pessoal, estou com uma duvida que me parece um tanto estranha,
no método printFilho o valor do atributo b impresso é null, porem ele foi inicializado
na sua declaração, porque então ele está nulo.

public class Teste {
	public static void main(String[] args) {
		new Filho("a");
	}
}

abstract class Pai {
	String a;

	public Pai(String a) {
		this.a = a;
		print();
	}

	public void print() {
		System.out.println(a);
		printFilho();
	}

	public abstract void printFilho();
}

class Filho extends Pai {
	String b = "b";

	public Filho(String a) {		
		super(a);
	}

	public void printFilho() {
		System.out.println(b);
	}
}

[]s

3 Respostas

R

Problema interessante. Acabo de rodar este código numa sessão de debug, e o valor de só é atribuído após a chamada a super(a), o que explica o valor nulo.

Naruffy

Obrigado pela ajuda roger_rf , rodei também em debug, percebi que ao entrar no construtor do pai o cursor do debug vai direto para a declaração do atributo a, porém na filha ela entra primeiro na chamda do super, ao invés de ter o mesmo comportamento da classe Pai, por que será que isso acontece.

Naruffy

Descobri,

Isso acontecen porque sempre que uma classe filha de outra é instancia a primeira coisa a ser executada é o construtor de sua classe super, antes mesmo das declarações.

[]s

Criado 31 de julho de 2009
Ultima resposta 31 de jul. de 2009
Respostas 3
Participantes 2