Array de varios tipos

olá…
estou com uma duvida meia logica…rs…pra mim neh…rs

bom, eh o seguinte…estou tentando criar um array bi-dimencional onde neste array eu terei na primeira coluna valores do tipo de uma classe qualquer (ex Gato) e na outra coluna eu terie de outra classe (Cao)
bom, eh claro q o correto seria fazer assim:

Gato g[];
Cao c[];

mas ai me veio na cabeça q todas as classes são filhas da classe primitiva OBJECT, ai fiz o seguinte

Object animais[][];

deu pra saca a ideia??

mas não funciono…e eu queria sb o pq…

i otra coisa…existe como fazer arrays de varios tipos??

vlw aee…

Não consigo imaginar muito bem como eh um array de varios tipos, criando um array de Object ja eh de certa forma um array de varios tipos (todos possiveis). O que vc quer dizer varios tipos? tipo na posição 0 é Gato, na 1 eh Cao, etc? isso não da hehe.
Mas se seus animais herdassem de uma classe Animal, cria um array de Animal, que ele soh aceitara animais hehe ou então usa List’s…

algumas sugestões, da uma testada, e se ainda der erro na inserção do array bi. fala ae… tem outras formas de se fazer

import java.util.ArrayList;
import java.util.List;

public class Teste {
   abstract class Animal { }

   class Cao extends Animal { }

   class Gato extends Animal { }

   class Entry<T1 extends Animal, T2 extends Animal> {
      private T1 a1;
      private T2 a2;

      public Entry (T1 a1, T2 a2) {
         this.a1 = a1;
         this.a2 = a2;
      }

      public T1 getA1() { return a1; }

      public T2 getA2() { return a2; }
   }

   public void y() {
      Object[][] obj = new Object[2][2];
      obj[0][0] = new String();
      obj[0][1] = new Integer(1);
      obj[1][0] = new Cao();
      obj[1][1] = new Gato();
   }

   public void z() {
      Animal[][] animais = new Animal[2][2];
      animais[0][0] = new Cao();
      animais[0][1] = new Gato();
      // animais[1][0] = new String(); //erro (só aceita Animal)
      // animais[1][1] = new Integer(1); //erro (só aceita Animal)
   }

   public void x() {
      List<Animal> list = new ArrayList<Animal>();
      list.add(new Cao());
      list.add(new Gato());
      // list.add(new String()); //erro (só aceita Animal)
   }

   public void k() {
      List<Entry<Cao, Gato>> list = new ArrayList<Entry<Cao, Gato>>();
      // list.add(new Entry<Cao, Gato>(new Gato(), new Cao())); //erro porque eu disse que eh Cao, Gato e passo Gato, Cao
      list.add(new Entry<Cao, Gato>(new Cao(), new Gato()));
      list.add(new Entry(new Gato(), new Cao())); // cuidado com essas coisas, não dei valores aos meus Generics T1 e T2 então ele assume qq animal, então passei Gato, Cao para uma lista de Entry's de Cao, Gato, mas nesses casos é aprensentado um warning
      Entry<Cao, Gato> x = list.get(1);
      Cao k = x.getA1(); // classCastException porque no segundo add eu passei um Entry com erro
   }
}

Olá…
intaum…agora deu uma complicadinha em otras coisas rsrs

bom, da ou naum da pra cria um array do tipo Object e se fizer isso, ele aceita qualquer tipo?? ou isso naum existe, e caso naum, pq naum da certo?

outra coisa…
fiquei com duvidas em algumas a sintaxe que vc usou…nunca vi isso em java…

são elas:

class Entry<T1 extends Animal, T2 extends Animal> { }

pra q serve e sinal de “<” e pq vc usou dois nomes de classe numa mesma declaração de classe?

a outra é

pra que serve os sinais de “<” e “>”??

vlw ae veio…to começando com o baratu por isso to meio perdido em algumas sintaxes…mas eh questão de tempo…

List&lt;Animal&gt; list = new ArrayList&lt;Animal&gt;&#40;&#41;;

isso com Generics quer dizer que eh uma lista que só aceita objetos do tipo Animal. Esses < e > são Generic’s, tem que ter Java5, algumas pessoas não gostam, eu acho legal eheh :stuck_out_tongue: mas não da para explicar tudo num topico, da uma lida em alguns tutoriais:

http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html
http://www.argonavis.com.br/cursos/java/j100/tiger.html#j5-genericos

etc…


E da para criar um array do tipo Object, olha la o que eu tinha feito

   public void y&#40;&#41; &#123;
      Object&#91;&#93;&#91;&#93; obj = new Object&#91;2&#93;&#91;2&#93;;
      obj&#91;0&#93;&#91;0&#93; = new String&#40;&#41;;
      obj&#91;0&#93;&#91;1&#93; = new Integer&#40;1&#41;;
      obj&#91;1&#93;&#91;0&#93; = new Cao&#40;&#41;;
      obj&#91;1&#93;&#91;1&#93; = new Gato&#40;&#41;;
   &#125; 

isso não funciona para vc?! diz o erro que da

veio…se acredita q agora foi kk axo q tava fazendo alguma cagada kkk

mas intaum cara…isso significa q o java pode se inserir varios tipos em um array diferentemente do C…

isso se procede mesmo?

sobre o generics soh estudando melhor mesmo…mas vlw eee
flw

Isso chama-se polimorfismo, todas os elementos do array Object[], são do tipo Object, mas é possível inserir qualquer subtipo de Object nele, veja sobre polimorfismo em:

Em C isso não é possível porque C não é orientado a objetos, muito menos polimorfico.

vish…

axava q polimorfismo era o conceito de existir varias funções com o mesmo nome mudando somente seus tipos de parametros…

tipo:

public void a() {
}
public void a(int a) {
}

tem o mesmo nome, muda soh parametros…

bom, se isso não eh poliformismo…qual o nome disso q se faz com as funções ??

sim, antes do java1.5 todas as ArrayList podia guardar objetos de vários tipos. E apartir do java1.5 pode-se cirar ArrayList especificas.

Agora, vc só tem que prestar atenção quando vc pegar o objeto da arrayList, vc tem que saber qual tipo de objeto vc ta pegando pra poder usar os metodos deles, a não ser que seja tudo herdado.

[quote=“ozzyjunior”]
bom, se isso não eh poliformismo…qual o nome disso q se faz com as funções ??[/quote]
Sobrecarga.