Converter tipo

fala ae,

pessoal, eu tenho que fazer uma classe que se chama “Modelo” e outras duas classes filhas dela que são: “ModeloTipoA” e “ModeloTipoB”.

e dentro de outra classe eu tenho um array da classe Modelo: Modelo modelos [] = new Modelo [100];

ae eu tenho que ter um metodo que busca uma propriedade que é exclusiva dos moodelos do tipo A… sendo que na classe Modelo tem o metodo isTipoA() e isTipoB() para eu verificar qual é qual…

entao eu to pensando em fazer algo desse tipo:


public void getTipoA (String propriedadeModelosA[])
    {
           int n = this.modelos.length;
           int j = 0;
           for (int i=0;i<n;i++)
           {
               if (modelos[i].isTipoA())
               {
                    // esse modelos[i] é do tipo Modelo, que eh a classe mae da classe ModeloTipoA
                    ModeloTipoA modelo = (ModeloTipoA) modelos[i]; 

                    // o metodo getPropriedade() só existe dentro da classe ModeloTipoA
                    propriedadeModelosTipoA[j] = modelo.getPropriedade();
                    j++;
               }
           }

    }

minha duvida eh:

quando eu faço a conversao de tipo: ModeloTipoA modelo = (ModeloTipoA) modelos[i]; , as propriedades que sao exclusivas da classe ModeloTipoA ficam diponiveis nesse objeto modelo ou quando eu jogo o objeto da classe ModeloTipoA num array do tipo Modelo ela perde as caracteristicas de classe filha?

deu pra entender?

eu queria saber se isso funcionaria…

vlw

Continuam sim cara. Faça um teste aí pra comprovar!

Um objeto de determinada classe continua pertencendo a essa classe… esse fato não mudou, afinal, você pode inserir esse objeto no vetor de modelos porque o ModeloTipoA nunca deixou de ser um modelo…

abraço.

Note que não é preciso de um atributo para identificar se o objeto é de determinada classe. O operador instanceof já faz isso:

String a = "adas";
if (a instanceof Integer) {
    // isso é mentira
} else if (a instanceof String) {
   // é verdade
}

Outra coisa: receber um vetor de Strings como argumento é perigoso pois você simplesmente não sabe quantas posições há naquele vetor (e simplesmente ir colocando coisas lá acreditando que caberá tudo pode gerar um ArrayIndexOutOfBoundsException).

Sugiro que faça algo assim:

public String[] getTipoA () {
	List<String> propriedades = new ArrayList<String>();
	for (Modelo m : modelos) {
		if (m instanceof ModeloTipoA) {
			ModeloTipoA modelo = (ModeloTipoA) m; 
			propriedades.add(modelo.getPropriedade());
		}
	}
	return propriedades.toArray(new String[0]);
}

fala ae pessoal,

mto obrigado pelas respostas e pelas dicas!

vlw