Inner
is an inner class. It can only be created when there is an enclosing instance of the class containing the Inner
class definition.
However, you've created a static
nested class, Nested
, which extends from this class. When you try to invoke the super constructor
public Nested(String str, Boolean b , Number nm) { super("2",true); }
it will fail because the super constructor, for Inner
, depends on an instance of Outer
, which doesn't exist in the static
context of the Nested
class. Jon Skeet provides a solution.
An explanation of the solution appears in the JLS here.
Superclass constructor invocations may be subdivided:
Unqualified superclass constructor invocations begin with the keyword super (possibly prefaced with explicit type arguments).
Qualified superclass constructor invocations begin with a Primary expression.
- They allow a subclass constructor to explicitly specify the newly created object's immediately enclosing instance with respect to the direct superclass (§8.1.3). This may be necessary when the superclass is an inner class.