olá…
bem… td contrutor chama o default de sua super classe…
public Filha(){
super(); //isso aqui existe em tds os construtores ele serve para chamar o default da sua super classe...
}
o construtor serve para “inicializar” a classe… portanto antes de “inicializar” minha clsse filha preciso “inicializar” minha classe pai…
public class Veiculo extends Object{
public Veiculo(){
super(); //chama o construtor de Object q é sua super calsse...
System.out.println("Classe Veiculo");
}
}
public class Carro extends Veiculo{
public Carro(){
super(); //chama o construtor default de Veiculo q é sua super classe...
System.out.println("Classe Carro");
}
}
public class TesteSuper{
public static void main(String args[]){
new Carro();
}
}
Saida...
Classe Veiculo
Classe Carro
geralmente vc não encontra o super(); default em um construtor pq ele e default =)
mais na verdade oq acontece e isso…
agora qnd vc declara um construtor (exemplo Veiculo(String cor, double preco) ) o default ja não existe mais…
O Construtor sem argumentos so é default qnd não se declara nenhum construtor, qnd vc decalara um construtor ele sobrepõem o default…
portanto vc e obrigado a chamar o super(cor, preco) no construtor da filha… caso contrario daria erro, pois ele não iria encontrar o default… e ele não conseguiria “inicializar” o sua super classe…
public class Veiculo extends Object{
private String cor;
private double preco;
public Veiculo(String cor, double preco){
super(); //chama o construtor de Object q é sua super calsse...
System.out.println("Classe Veiculo");
this.cor = cor;
this.preco = preco;
}
}
public class Carro extends Veiculo{
private String marca;
public Carro(String cor, double preco, String marca){
// super(); isso aqui não iria funcionar pois ele não conseguiria encontrar nenhum construtor sem argumentos em Veiculo
super(cor,preco); //neste caso vc e obrigado a fazer isso... caso contrario ele não conseguiria "inicializar" a classe pai.
System.out.println("Classe Carro");
this.marca = marca;
}
}
public class TesteSuper{
public static void main(String args[]){
new Carro("Verde abacate",15000,"Ford");
}
}
Saida...
Classe Veiculo
Classe Carro
o ultimo toque e q vc não pode declarar nada antes do super… o comando super deve ser a primeira instrução dentro do construtor… seja ele default ou não…
agora ficou um pouco mais claro?
editando…
esqueci de uma coisinha… ^^
vc pode fazer a sobrecarga de construtores que nd mais e do q ter varios construtores na mesma classe…
logo em veiculo vc poderia ter:
public Veiculo(){ //codigo aqui }
public Veiculo(String cor, double preco){ //codigo aqui }
public Veiculo(String bla, String bla, String bla){ //codigo aqui }
com isso na sua classe Carro vc poderia…
//não colocar nada... chamaria o construtor sem argumentos
super(); //chamaria o construtor sem argumentos
super(cor,preco); //chamaria o com 2 args
super(bla,bla,bla); //chamaria o com 3 args
e por ultimo vc pode chamar outros construtores da mesma classe… isso apenas dentro de um construtor…
public Veiculo(){
Veiculo(cor,preco);
}
public Veiculo(String cor, double preco){
Veiculo(bla,bla,bla);
}
public Veiculo(String bla, String bla, String bla){
//Veiculo(); se eu fizer isso vou ferrar td... vc pode imaginar pq =)
}
putz acho q é so isso… =)