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
se entendi bem, você quer saber se o animal é instância da classe tal.
faz assim:
if (cachorro instanceof Cachorro) {
...
}
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.
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
Vc pode apelar para reflection, mas não vejo pq vc não pode fazer
[code]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);
}
}[/code]
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…
agora falando seriu diga se o peczenyj nao parece com o shevchenko?!