I don't claim to completely understand the ins and outs of inner classes, and I hope what I post won't add to the confusion.
Look at this code snippet:
Quoting from "Java in a Nutshell" regarding static member classes,
In code outside of the containing class, a static member class or interface is named by combining the name of the outer class with the name of the inner class.
So "myOuter.myInner.myConst" is well-formed and well-defined, but
you should think of it as two components ["myOuter.myInner" as the class name/path, "myConst" as the static instance variable reference] as opposed to three components ["myOuter", "myInner" and "myConst"].
Within the "myOuter" class you can reference "myInner" w/out any qualifications, but outside of the "myOuter" class--as, for example, within the "myTest" class--the only way to refer to the inner class is to use "myOuter.myInner". So simply using "outer.myInner" has no meaning.
So in the code I posted I added:
myOuter.myInner inner = new myOuter.myInner(); which shows that you can refer to the "myInner" class, but you have to fully qualify it.
I hope this helps a bit ...