Tudo bem?
Vamos lá…
Regra 1: A classe declarada dentro do método só é visivel dentro dele.
Regra 2: A classe declarada dentro do método só pode acessar atributos com escopo de classe, ou atributos declarados dentro do método, mas este deve ser final e por último, pode tb acessar os parâmetros do método, deste que sejam finais.
A regra 1 é bem óbvia. É como o conceito de escopo de método, ou seja, se ela foi declarada dentro do método só vai existir lá dentro.
Agora a regra 2, tem que pensar um pouco mais… Vou dar um exemplo (que é baseado no livro da Katia, Certificação). Imagine o seguinte, vc tem um objeto na classe principal (no exemplo do jeveaux é o myOuter2). Vc pode acessar este objeto na classe declarada dentro do método (conforme regra 2). Agora imagine dentro do método (no qual foi declarada a classe) tivesse um outro objeto, e este consequentemente pudesse ser atribuído ao objeto de foi declarado na classe principal. O que ia acontecer é que, quando o método fosse finalizado a referência para o objeto declarado dentro dele tb ia pro “espaço”, consequentemente o objeto da classe principal que o recebeu teria uma referência inválida… por isso que que existe a regra 2.
Tentei ao máximo ser bem objetivo… 