Pietro
The class Inner is a staic nested class, not an inner class. From the
JLS section 8.1.2
An inner class is a nested class that is not explicitly or implicitly declared static.
In the first line in question:
Base.Inner inner = new Base.Inner();
You have an unqualified class instance creation expression. From the
JLS section 15.9.1 This is a legal way to create new instance of any type of class as long as it accesible and not abstract.
Your second line in question:
Base.Inner inner2 = base.new Inner();
Is a qualified creation expression but the problem here is that 'It is a compile-time error if Identifier is not the simple name (�6.2) of an accessible (�6.6)
non-abstract inner class.' Identifier refers to the class name after the new key
word. The key here is that Inner is not an inner class it is toplevel class itself so you can't create it with a qualified creation expression.
This part of the JLS is pretty tricky. you might want to check out the article in the January edition of the
Java Ranch newsletter. that might shed some light on it for you.