Ok...it works now...but I still don't understand why the constructor is making a difference.
Why doesn't it work like this? - class Outer2 will have the standard-no-args constructor inserted by the compiler which will also have a no-args call super(). This call will invoke the standard-no-args constructor of the inner class viz. Outer1.Inner.
Or, is all this because of the fact that an instance of the inner class cannot exist without an instance of it's outer class.
The invocation o1.super() is new to me - don't we usually have only a call to super()?, is this method of invocation viz. o1.super() type, only for this special case of when extending an inner class?