no enclosing instance of type… in scope

后端 未结 2 943
后悔当初
后悔当初 2020-12-10 05:52

I investigate java inner classes.

I wrote example:

public class Outer {
    public Outer(int a){}

    public class Inner {
        public Inner(Stri         


        
2条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-10 06:11

    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.

提交回复
热议问题