Como fazer para substituir Fluxos condicionais por polimorfismo

Boa noite galera como fazer para substituir Fluxo condicional por Polimorfismo.

(favor citar algum exemplo)

Eu quero que um método receba uma String relacionado a um animal,
e em um fluxo condicional decida o barulho a ser imprimido desse animal.

public void fazerBarulho(String animal) {
    if(animal.equals("Cachorro")) {
        System.out.println("Au Au");
    } else if(animal.equals("Galinha")) {
        System.out.println("Có Có");
    } else if(animal.equals("Vaca")) {
        System.out.println("Muuuu");
    } else {
        System.out.println("Animal n√£o identificado.");
    }
}

Agora com o polimorfismo eu poderia criar uma classe pai chamada Animal com um método barulho
e todos animais que vão herdar dela terá que sobrescrever este método de acordo com seu barulho.

public abstract class Animal {
    public abstract void barulho();
}

public class Cachorro extends Animal{
    public void barulho() {
        System.out.println("Au Au");
    }
}

public class Galinha extends Animal{
    public void barulho() {
        System.out.println("Có Có");
    }
}

public class Vaca extends Animal{
    public void barulho() {
        System.out.println("Muuuu");
    }
}

Agora o método fazerBarulho() feito com fluxo condicional poderia ser substituído pelo polimorfismo.
Em vez de testar o par√Ęmetro ele simplesmente recebe um tipo gen√©rico Animal e executa o m√©todo barulho que existe nele,
mas o que realmente ser√° executado √© o m√©todo do animal passado por par√Ęmetro que poderia ser qualquer um que herda de Animal.

public void fazerBarulho(Animal animal) {
    animal.barulho();
}
1 curtida

Outro exemplo: http://www.guj.com.br/java/55885-como-nao-utilizar-if-ou-switch#293436

Obrigado pessoal.