The member variable 'name' in the enum doesn't have an access specifier (public, protected, private), so it has default access - which means that other classes in the same package such as class Class can access it.
See The Java Tutorial - Controlling Access to Members of a Class
Note that an enum is a kind of special class, and the access rules for classes apply to enums as well.
Yes, also the statement: Color a = Color.Green; Here 'a' is reference variable of type 'Color' that refers to an enum type 'Green'. You can use it more less you use a reference variable. The statement: System.out.println(a.Red.name); Its ok to access another enum type using the same variable, even you can use it to refer to another enum type: a = Color.Blue;