Array que recebe objetos de classe e subclasse

Olá, boa noite pessoal!

Gostaria de saber como eu faço um array que recebe objetos da classe e da subclasse…

Minhas classes:

[code]public class Compromisso{
private String nome;
private int dia, mes;

public Compromisso(String n, int d, int m){
    nome = n;
    dia = d;
    mes = m;
}

    public String getNome(){
        return nome;
    }

    public void setNome(String x){
        nome = x;
    }

    public int getDia(){
        return dia;
    }

    public void setDia(int x){
        dia = x;
    }

    public int getMes(){
        return mes;
    }

    public void setMes(int x){
        mes = x;
    }

}

[/code]

subclasse:

[code]public class NovoComp extends Compromisso{
private int durComp, priorComp;

public NovoComp(String n, int d, int m, int dur, int prior){
    super(n,d,m);
    durComp = dur;
    priorComp = prior;
}

public int getDurComp(){
    return durComp;
}
public void setDurComp(int x){
    durComp = x;
}
public int getPriorComp(){
    return priorComp;
}
public void setPriorComp(int x){
    priorComp = x;
}

}

[/code]

Em outra classe (Agenda) quero um array que recebe objetos dessas duas classes, alguém pode me ajudar??

Um array que contém ambos Compromisso e NovoComp?

No caso, um array de compromissos poderia receber ambos

[code]Comprimisso[] lista = new Comprimisso[15];

lista[0] = new Compromisso(parametros);

lista[1] = new NovoComp(parametros);[/code]

Ok, dentro da classe agenda eu tenho um método de assinatura:

public void insereUmComp(String nom, int d, int ms, int dur, int prop)

esse método deve servir tanto para instanciar objetos Compromisso quanto NovoComp, e quando for Compromisso deve receber dur = 0 e prop = 1;

Alguma luuuuz pra me ajudar?

Como você disse:

[code]Compromisso x;

if (dur == 0 && prop == 1)
x = new Compromisso(nom, d, ms);
else
x = new NomeComp(nom, d, ms, dur, prop);
[/code]

PS: Não use arrays, use uma List e ArrayList.

[quote=Bruno Laturner]

PS: Não use arrays, use uma List e ArrayList.[/quote]

Eu não sei usar isso, só aprendi array até agora :S

Tudo bem natz?

if( objeto_recebido instanceof Compromisso ) faz o que tem que fazer…

nao entendi muito bem a pergunta…qualquer coisa me adicione no msn que lhe ajudo.

ate.

[quote=natz][quote=Bruno Laturner]

PS: Não use arrays, use uma List e ArrayList.[/quote]

Eu não sei usar isso, só aprendi array até agora :S[/quote]

Se for coisa se aula, então deixa.

Certo, o array eu consegui fazer, obrigada!

Outra coisa, preciso imprimir na tela, tanto os objetos Compromisso, quanto os NovoComp…

public void mostraComp(){ System.out.println("\nCompromissos: "); for(int i = 0; i<comp.length; i++) if(comp[i] !=null) System.out.println(comp[i].getNome() + " " + comp[i].getDia() + "/" + comp[i].getMes()); }

Nesse trecho só imprimi objetos Compromisso…

pois vc só esta utilizando a variavel comp[i]…

utilize a variavel que referencia o array de novoComp[i]…

Implemente um método toString na classe Compromisso:

public String toString() { return this.nome + " " + this.dia + "/" + this.mes; }[code]public void mostraComp()
{
System.out.println("\nCompromissos: ");

for(int i = 0; i < comp.length; i++)
if(comp[i] != null)
System.out.println(comp[i]);
}[/code]
Desse modo, qualquer chamada que precise de uma “versão” em String do teu objeto, vai chamar o método toString, e imprimir o que ele retornar.

Se quiser imprimir algo diferente p/ a classe NovoComp, também implemente o toString nele com as mudanças que você quiser. Esse é o primeiro passo p/ entender sobre polimorfismo.

Mas tem que ser tudo em uma array só :cry:

Certo, mas como faço para, se o objeto instanciado for um NovoComp, imprima os dados que existem somente na subclasse NovoComp??

crie um metodo na classe compromissos MostraDados que mostre todos os dados do compromisso…

e na sub classe reescreva esse metodo para imprimir apenas os do novo compromisso…

assim quando voce tiver uma referencia de novo compromisso ele usara o metodo de novo compromisso…

Implemente um toString dentro de NovoComp que retorne uma String com os dados específicos p/ aquela classe. Esse toString vai sobreescrever automaticamente o toString feito em Compromisso e imprimir os dados certos.

Interessante esse lance do toString Bruno Laturner…

entao tipo…ao chamar o metodo.toString, ja era… ele faz o que tem la dentro??

interessante…evita de ficar implementando metodos que mostrem as variaveis de uma classe…como foi o meu sugerido…

valeeeeeeeeeeeeeeu galera!! deu certo! abraços a todos!!!

[quote=natz]valeeeeeeeeeeeeeeu galera!! deu certo! abraços a todos!!![/quote] 8)

Como ficou o código? Poste ai!

Segue as classes prontas:

[code]public class Compromisso{
private String nome;
private int dia, mes;

public Compromisso(String n, int d, int m){
    nome = n;
    dia = d;
    mes = m;
}

    public String getNome(){
        return nome;
    }

    public void setNome(String x){
        nome = x;
    }

    public int getDia(){
        return dia;
    }

    public void setDia(int x){
        dia = x;
    }

    public int getMes(){
        return mes;
    }

    public void setMes(int x){
        mes = x;
    }
    
    public String toString(){
        return "Tipo: " + this.nome + "   Data: " + this.dia + "/" + this.mes;
    }

}
[/code]

public class NovoComp extends Compromisso{
private int durComp, priorComp;

    public NovoComp(String n, int d, int m, int dur, int prior){
        super(n,d,m);
        durComp = dur;
        priorComp = prior;
    }
    
    public int getDurComp(){
        return durComp;
    }
    public void setDurComp(int x){
        durComp = x;
    }
    public int getPriorComp(){
        return priorComp;
    }
    public void setPriorComp(int x){
        priorComp = x;
    }
     public String toString(){
            return "Tipo: " + super.getNome() + "   Data: " + super.getDia() + "/" + super.getMes() + "    Duração: " + this.durComp + "   Prioridade: " + this.priorComp;
        }




}
public class Agenda{
    private Compromisso []comp;
    private int totalComp;
    private Compromisso c;
    private NovoComp nc;
    
    public Agenda(){
         totalComp=0;
        comp= new Compromisso[10];
        System.out.println("Bem vindo à Agenda em Java!");
    }
    
    public void insereUmComp(int pos, String nom, int d, int ms, int dur, int prior){
         for(int i=0; i<1; i++)
        if (dur == 0 && prior == 1)
        comp[pos] = new Compromisso(nom, d, ms);
        else
        comp[pos] = new NovoComp(nom, d, ms, dur, prior);
    }
      

    public void mostraComp(){
  System.out.println("\nCompromissos: ");

  for(int i = 0; i < comp.length; i++)
    if(comp[i] != null)
      System.out.println(comp[i]);
}
}
public class TestaAgenda{
public static void main (String args[]){

Agenda ag = new Agenda();

ag.insereUmComp(0,"Aniversario", 22, 2,1,0);
ag.insereUmComp(1,"Festa", 12, 7,3,4);
ag.insereUmComp(2,"Concurso", 7, 5,1,2);

ag.mostraComp();

}
}

Obrigada pela ajuda garotos ;D