Quando você faz referência a uma classe, o compilador busca essa classe do escopo mais interno para o mais externo. Assim, se a referência ocorre dentro de um método, a ordem de busca é classes locais, classes aninhadas e finalmente top-level classes. No seu caso, essa ordem deveria ser “inner” , “middle” e “outter”. Porém, como a criação do objeto e a chamada de m() ocorrem antes da declaração de “inner” essa classe ainda não existe no escopo local. Assim, ela busca no escopo da classe e encontra a declaração “middle”, e a usa para criar o objeto e chamar m().
ECO2004
[b]Vlw pela resposta!
Agora, como seria se eu quisesse chamar o médoto m() da classe A?
[/b]
rmendes08
Qual das três :shock: ???
ECO2004
Foi mal! “outer”. A mais externa.
rmendes08
Nesse caso acho que não tem muita alternativa não. Acho que só qualificando a classe ou mudando o nome logo de uma vez.
pmlm
Se a tua classe estiver dentro de uma package podes fazer:new packageName.A().m();