Duvida polimorfismo

7 respostas
B
criei uma classe mae  animal  com as classes filhas cavalo, cachorro e preguiça

ai criei uma classe veterinario e criei um metodo examinar que quando o veterinario examina o animal faz um som , esse som é um metodo que so tem nas classes filhas e o metodo vai receber como parametro qualquer animal

assim:

public void examinar(Animal a)

{
((casting) a).som();

}

qual o metodo que retorne a classe do a
nao pode ser o getClass().getName() porque retorna nome da classe como string

7 Respostas

wbdsjunior

se entendi bem, você quer saber se o animal é instância da classe tal.

faz assim:

if (cachorro instanceof Cachorro) { ... }

peczenyj

Pq fazer Casting?

Se o Animal produz som, basta que Animal possua a assinatura do método desejado - se for uma interface - ou que tenha esse método (abstrato ou sobreescrito).

Se vc quer receber um Animal e ter um comportamento diferente se é um Gato ou Cachorro, das duas, uma:

  • Ou vc sobrecarrega o metodo para receber Gato e outro para receber Cachorro
  • Ou vc deixa o objeto se comportar de forma diferente.
B

cara eu queria mais ou menos isso mas nao pode fazer desse jeito
pois imagina que tenho 50 animais diferentes
eu queria saber se tem algum metodo
tipo o getClass().getName() que retornasse logo a classe
pq esse so retorna o nome em string ai da erro
tem que retornar a classe

queria alguma forma que retornasse a classe que tah instanciada
e nao fazer varios ifs para testar de um por um

peczenyj

Vc pode apelar para reflection, mas não vejo pq vc não pode fazer

interface Animal{
    void som();
}

class Gato implements Animal{
   public void som(){ System.out.println("Au Au"); }
}

class GatoIrritadinho implements Animal{
   public void som(){ System.out.println("Fuuuuu! MIAURRRRRR GRAU GRAU! FUUUUUUUUUUUUUUUUUUU! TE ODEIO QUERO WISKAS !!!!"); }
}

class Teste{
  public void examinar(Animal a) {
     a.som();
  }
  public static void Main(String [] xxx){
     Gato fofuxo = new Gato();
     Teste t = new Teste();    
     t.examina(fofuxo);
  }
}
abelgomes

faz como o peczenyj disse…

assim:

package polimorfismo;

public abstract class Animal {
	
	public abstract void emitirSom();

}

package polimorfismo;

public class Gato extends Animal{

	@Override
	public void emitirSom() {
		System.out.println("Gato: Miau!");
		
	}

}


package polimorfismo;

public class Cachorro extends Animal{

	@Override
	public void emitirSom() {
		System.out.println("Cchorro: au!");
		
	}

}


package polimorfismo;

public class Preguica extends Animal{

	@Override
	public void emitirSom() {
		System.out.println("Preguça: Faz PN pq faltou coragem");
		
	}

}


package polimorfismo;

public class Veterinario {
	
	public void consultar(Animal a){
		System.out.println("Veterinario consultando Animal");
		a.emitirSom();
	}
}


package polimorfismo;

public class Teste {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Veterinario v = new Veterinario();
		Animal cachorro = new Cachorro();
		Animal gato = new Gato();
		Animal preguica = new Preguica();
		
		v.consultar(cachorro);
		
		v.consultar(gato);
		
		v.consultar(preguica);

	}

}

pronto gafanhoto…do jeito que cara falou…mas aqui eu coloquei um exemplo…fica bem mais simples…

B

valeu consegui agora

abelgomes

agora falando seriu diga se o peczenyj nao parece com o shevchenko?!

Criado 6 de novembro de 2008
Ultima resposta 6 de nov. de 2008
Respostas 7
Participantes 4