Java: доступ к константы в перечислении (enum)

читая книгу SCJP, я обнаружил что-то вроде этого в главе 1 «самопроверка»:

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);
    }
} 

Примечание: код компилируется нормально. в главе 1 «Самопроверка» мы нашли что-то вроде этого: enum Animals {DOG («гав»), CAT («мяу»), FISH («бормотание»); Струнный звук; Животные (String s) {sound = s; } ...

читая книгу SCJP, я обнаружил что-то вроде этого в главе 1 «самопроверка»:

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);
    }
} 

Примечание: код компилируется нормально. в главе 1 «Самопроверка» мы нашли что-то вроде этого: enum Animals {DOG («гав»), CAT («мяу»), FISH («бормотание»); Струнный звук; Животные (String s) {sound = s; } ...

читая книгу SCJP, я обнаружил что-то вроде этого в главе 1 «самотестирование»:

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);
    }
} 

Примечание: код компилируется нормально. Я не понимаю, почему мы можем получить доступ к константам DOG, CAT или FISH из переменной a . Я подумал (и это также написано в книге), что константы DOG, FISH, CAT реализованы аналогично public static final Animals DOG = new Animals (1); Итак, если они действительно статичны, почему мы можем получить к ним доступ из a ? Последняя строка мне знакома.

10
задан florian 5 March 2011 в 20:32
поделиться