Problema com Override em um Polimorfismo

Fala pessoal, sou iniciante em Java e estou estudando OO.
Não consigo fazer um override no método emitirSom(), porque?

Minhas classes são: Main, Animal, Cachorro e Gato.

Main

package animais;

/**
 *
 * @author Uriel
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static Cachorro cao;
    public static Gato gato;
    
    public static void main(String[] args) {

        emitirSom(new Cachorro("Toto", 15));
        emitirSom(new Gato("Tom", 10));
        
    }

    public static void emitirSom(Animal animal)
    {
        animal.emiteSom();
    }
}

Animal

package animais;

/**
 *
 * @author Uriel
 */
class Animal {
    protected String nome;
    protected int idade;

   
    public Animal(String nome, int idade)
    {
         this.nome = nome;
         this.idade = idade;
    }
    
    public void emiteSom()
    {
        System.out.println("Animal fazendo som");
    }
}

Cachorro

package animais;

/**
 *
 * @author Uriel
 */
class Cachorro extends Animal
{
    
    public Cachorro(String nome, int idade)
    {
        super(nome, idade);
    }

    @Override
    public void emitirSom()
    {

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

}

Gato

package animais;

/**
 *
 * @author Uriel
 */
class Gato extends Animal {
    
    public Gato(String nome, int idade)
    {
        super(nome, idade);
    }

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

Porque não tenho o retorno de “miau” e “au au” para os respectivas classes na minha Main?

Abs!

O método na classe Animal é emiteSom(), os métodos nas classes filhas se chamam emitirSom()

A annotation override nem deveria estar funcionando, aliás.