Por que os campos particulares de um tipo de enumeração são visíveis para a classe que contém?
public class Parent {
public enum ChildType {
FIRST_CHILD("I am the first."),
SECOND_CHILD("I am the second.");
private String myChildStatement;
ChildType(String myChildStatement) {
this.myChildStatement = myChildStatement;
}
public String getMyChildStatement() {
return this.myChildStatement;
}
}
public static void main(String[] args) {
// Why does this work?
System.out.println(Parent.ChildType.FIRST_CHILD.myChildStatement);
}
}
Existem regras adicionais com relação ao controle de acesso para subclasses Parent, classes dentro do mesmo pacote etc., em referência a este enum? Onde posso encontrar essas regras nas especificações?