Duvida no polimorfismo com if

Boa tarde nao to conseguindo faser uma coisa simples sem o if funciona mas qndo eu ponho o if nao consigo ??

segue o codigo main

package oo7;

import javax.swing.JOptionPane;

public class Controle {

/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		String nome;
		Controle cont = new Controle();
nome=JOptionPane.showInputDialog("Digite o nome");
cont.somanimal(nome);


/*cont.faserSomAnimal(new Cachorro());
cont.faserSomAnimal(new Cavalo());
cont.faserSomAnimal(new Preguica());
	}

public void  faserSomAnimal(Animal animal){
	
		animal.som();
		
	
}
*/
	}
public Animal somanimal(String nome){
	
	if(nome.equalsIgnoreCase("cachorro")){
		
		return new Cachorro();
	}
	if (nome.equals("cavalo")){
		return new Cavalo();
		
	}	
	
	return somanimal( nome);
}	
}


pq da forma comentada funfa e sem nao ??

as classes Cachorro, Cavalo e Preguica sobrescrevem o metodo som() da classe Animal?

siim…
cachorro


package oo7;


public class Cachorro extends Animal{

	public void som(){
	
System.out.println("auauauauaua");
}
}

as demais tbm

Qual eh o erro que voce tem no console?

t+

o erro e q nao aparece nada , deveria aparecer o som do metodo …

E se você tentar assim:

Classe Animal

public class Animal {  
  
    public void som(){

    }
}  

Classe Controle.

import javax.swing.JOptionPane;

public class Controle {

	public static void main(String[] args) {

		String nome;
		Controle cont = new Controle();
		nome = JOptionPane.showInputDialog("Digite o nome");
		cont.somanimal(nome);

	}

	public void somanimal(String nome) {

		if (nome.equalsIgnoreCase("cachorro")) {

			 new Cachorro().som();
		}
		if (nome.equals("cavalo")) {
			 new Cavalo().som();

		}

	}
}

Classe Cachorro

public class Cachorro extends Animal {

	public void som() {

		System.out.println("auauauauaua");
	}
}

Classe Cavalo



public class Cavalo extends Animal {

	@Override
	public void som() {
		System.out.println("Cavalo");

	}

}

Boa sorte.

se eu digitar “preguiça” fica loop infinito. isso está certo? talvez por isso não apareça nada… você está digitando outra coisa que não seja cavalo ou cachorro

Ja que voce está usando polimorfismo tenta fazer assim:

[code]public abstract class Animal {

public abstract String somAnimal();	

}[/code]

Voce coloca a classe animal como super classe dos animal, sobrescrevendo o metodo abstrato somAnimal(), em todas as outras classe com, por exemplo, a Cachorro:

public class Cachorro extends Animal{ public String somAnimal() { String latir = "Auauauau"; return latir; } }

e na classe controle ficaria assim :

[code]public class Controle(){
public static void examinar(Animal animal){
String som = animal.somAnimal();
System.out.println(som);
}

public static void main(String[] args){
	Cachorro cachorro = new Cachorro();
	Cavalo 	   cavalo = new Cavalo();
	Preguica preguica = new Preguica();
	
	Controle.examinar(cavalo);
	Controle.examinar(cachorro);
	Controle.examinar(preguica);
}

}[/code]

E assim qualquer animal que voce passar como argumento para o metodo animal vai pegar o metodo somAnimal(), da classe passada!!