Java: acceso a las constantes en una enumeración (enumeración)

leyendo el libro SCJP, he encontrado algo como esto en el capítulo 1 "autocomprobación":

enum Animals {
    DOG("woof"), CAT("meow"), FISH("burble");
    String sound;
    Animals(String s) { sound = s; }
}

class TestEnum {      
    static Animals a; 
    public static void main(String[] args) {                                                                                     
        System.out.println(a.DOG.sound + " " + a.FISH.sound);   

        // the following line is from me
        System.out.println(Animals.DOG.sound + " " + Animals.FISH.sound);
    }
} 

Nota: el código compila bien. Lo que no entiendo es por qué podemos acceder a las constantes DOG, CAT o FISH desde la variablea. Pensé (y también está escrito en el libro) que las constantes DOG, FISH, CAT son implementadas de manera similar apublic static final Animals DOG = new Animals(1); Entonces, si realmente son estáticos, ¿por qué podemos acceder a ellos desdea? La última línea es la forma en que estoy familiarizado.

Respuestas a la pregunta(3)

Su respuesta a la pregunta