Usando Super estou com duvida!

7 respostas
Rodrigoalvis
Eu uso o super pra relacionar uma classe com a outra estou cert??

um exemplo

public PessoaJuridica (int codcliente, String cnpj, String razaoSocial){

super(codcliente);

o codigo cliente vem de outra relacao chamado CLIENTE
e no super eu botei somente o codigocliente…eu devo botar todos os dados que esta na estrutura cliente
o mesmo devo fazer no public PessoaJuridica…???

vlw

7 Respostas

Jeferson_Manetti

olá amigo...

neste caso o super esta servindo para chamar o construtor da sua superclasse...

exemplo:
public class Cliente{
   private int codigo;
  
   public Cliente(int codigo){
      this.codigo = codigo;
   }
  
   // getter setter
}
public PessoaJuridica extends Cliente{
   private String cnpj;     
   private String razaoSocial;

   public PessoaJuridica (int codcliente, String cnpj, String razaoSocial){
       super(codcliente); // isso aqui vai chamar o construtor de cliente!!!
       this.cnpj = cnpj;
       this.razaoSocial = razaoSocial;
   }

   // getter and setter
}

entedeu?

Rodrigoalvis

eu sei…mas eu devo botar os outros dados que tem no CLIENTE??

B

Que outros dados?

Cliente não tem cnpj nem razão social.

Rodrigoalvis

se tivesse eu teria que botar??

Rodrigoalvis

package Veiculo;

public class Carro extends Veiculo {

private String TipoCombustivel;

private boolean airbag;

private boolean direcao;

private boolean abs;

private boolean importado;

public Carro (String cor, double preco, int ano, String modelo,String marca, String TipoCombustivel, boolean airbag,boolean direcao, boolean abs, boolean importado ){

}
}

String cor, double preco, int ano, String modelo,String marca vieram da classe veiculo e devo botar esses mesmo dados no super??

Jeferson_Manetti

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… =)

thidaudt

Então, acho que estou entendendo sua dúvida… completando o que os colegas já disseram bem mais explicado funciona assim:
super() serve para chamar o(s) construtor(es) da classe pai que foi herdada.
As variáveis que vc irá chamar no super depende do construtor pai que vc está chamando…

class A{
  public A(String variavel_A){}
  public A(String variavel_A, String variavel_B){}
}
public B extends A{
   public B(){
     super("a","b"); // vc passou duas Strings pq a classe pai tem um construtor que "espera" duas Strings   
  }
}

espero ter ajudado… abs

Criado 29 de setembro de 2009
Ultima resposta 30 de set. de 2009
Respostas 7
Participantes 4