Да, перечисления могут иметь конструкторы и методы и переменные экземпляра, как и другие классы.Но вы не можете вызывать конструктор самостоятельно, как в обычном классе.Вы не можете назвать a = new Dog ("wooooof").Конструктор будет вызываться для вас компилятором.
Это скомпилируется нормально, но в строке 9, я думаю, компилятор предупредит вас, что вы получаете доступ к статическому полю нестатическим способом.Animal.DOG.sound - это «правильный путь», а не a.DOG.sound.