Ответ 1
Перечисления неявно public static final
.
Вы можете обратиться к a.DOG
, потому что вы можете получить доступ к статическим членам через ссылки на экземпляры, даже если значение null: статическое разрешение использует ссылочный тип, а не экземпляр.
Я бы не стал; он вводит в заблуждение: конвенция поддерживает статические ссылки типа (не экземпляра).
См. JLS 6.5.6.2 относительно переменной класса через экземпляры. См. JLS 15.11, почему он все еще работает с null
. Краткая характеристика: это ссылочный тип, а не экземпляр, через который статика разрешена.
Обновленные ссылки:/
JSE 6
- JLS 6.5.6.2 относительно доступа к переменной переменной через имя выражения
- JLS 15.11 относительно доступа к статическому полю через пустые ссылки
JSE 7
- JLS 6.5.6.2 относительно доступа к переменной переменной с помощью имени выражения
- JLS 15.11 относительно доступа к статическому полю через пустые ссылки
JSE 8