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?

questionAnswers(2)

yourAnswerToTheQuestion