Construtores e herança

3 respostas
B

Ola, amigos, sou novo no java, sou um Jr ainda., as estou estudando para a certificação a partir desta semana. Como não tenho grana pra compar os livrsos to catando amterial na net e fazendo exercicios para tirar minhas dúvidas.
Gostaria de postar algumas conclusões que cheguei e gostaria da ajuda de vcs.

Srs, sobre construtores e herança é correto afirmar que o comando super() ja é intrinseco ao construtor da classe filha, não preciso executar super para invocar o construtor padão da claase mãe. Agora se meu construtor na classe mae tiver uma assinatura eu preciso chamar o super() na primeira linha do meu construtor da classe filha seja ele padrão ou não.

Sempre é executado o construtor a classe mae antes da classe filha.
Se o construtor da classe filha for uns connstrutor padrão posso não declara-lo
Ja para métodos eu possso invocar super em qualquer lugar do método.

EStou correto ?

3 Respostas

G

Bom, vamos por partes…

public class Mae {
	public Mae() {
		System.out.println("Crianda Mae");
	}
}
public class Filha extends Mae {
	public Filha() {
		System.out.println("Crianda Filha");
	}
	
	public static void main(String args []) {
		System.out.println("Inicio Filha");
		
		Filha filha = new Filha();
		
		System.out.println("Fim Filha");
	}
}

Explicar isso…
Um modo de entender como funciona os construtores é pensando assim: Um filha não nasce antes do seu pai.

Por esse exemplo de código, o construtor da classe Filha chama o construtor da classe Mae, que chama o construtor de Object.
Aí, a construção de Object é finalizada, depois o da classe Mae, assim o construtor da classe Filha é finalizado…
Filha --> Mae --> Object
Object --> Mae --> Filha
Object é a classe que está acima de qualquer classe que não estende nenhuma.
Então a saída vai ser:
Inicio Filha
Crianda Mae
Crianda Filha
Fim Filha

G
Se o construtor da classe filha for uns connstrutor padrão posso não declara-lo
Você não precisa declarar um construtor padrão... Se você não fornecer nenhum construtor, o compilador criará um pra você...
public class Mae {

}
Esse código será interpretado dessa maneira:
public class Mae {
	public Mae() {
		super();
	}
}

Mas, se voe criar um construtor que receba argumentos, o construtor padrão do compilador, não será criado. Você terá que criar um com argumentos eu outro sem argumentos.

public class Mae {
	public Mae(String nome){
		this.nome = nome;
	}
	public Mae() {		
	
	}
	
	private String nome;
}
G
Ja para métodos eu possso invocar super em qualquer lugar do método.
public class SuperTeste {
	public void NomeDaClasse() {
		System.out.println("SuperTeste");
	}
}
public class SubTeste extends SuperTeste{
	public void SuperAntes() {
	
		super.NomeDaClasse();
		System.out.println("Super venho antes" + "\n");
	}
	public void SuperDepois() {
		System.out.println("Super venho depois");
		super.NomeDaClasse();
	}
	
	public static void main(String args[]){
		SubTeste sub = new SubTeste();
		
		sub.SuperAntes();
		sub.SuperDepois();
	}
}

A saída vai ser:

SuperTeste
Super venho antes

Super venho depois
SuperTeste

Criado 3 de outubro de 2009
Ultima resposta 3 de out. de 2009
Respostas 3
Participantes 2