在超级调用Java中调用父类的内部类

时间:2013-12-10 00:08:02

标签: java

所以,我早先碰到了一堵墙。如果我有一个类Parent,内部类SubParent如下:

public class Parent
{
   public class SubParent
   {
   }

   public Parent(SubParent sp)
   {
   }
}

然后我有一个Child类,它像这样扩展Parent:

public class Child extends Parent
{
   public Child()
   {
      super(new SubParent());
   }
}

然后我得到一个“错误:在调用超类型构造函数之前无法引用它”,并带有指向SubParent构造函数的箭头。

现在,如果我将SubParent作为其自己文件中的单独类,一切都很好。但我想把它作为一个内在阶级。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:2)

内部类实例需要存在外部类实例。在你打电话的时候

super(new SubParent());

在创建外部类实例之前,将调用SubParent构造函数。你不能这样做。

在自己的文件中声明SupParent或将其设为static。你想要达成什么样的关系呢?

答案 1 :(得分:1)

由于您的SubParent不是static嵌套类,因此它与它所属的Parent对象之间存在隐式关系(在本例中,也是{ {1}}对象)。听起来你并不需要内心阶级提供的关系;尝试Child SubParent

请注意,内部类之间存在区别,它不是public static class(引用其包含类的实例),而是嵌套class ,这是包含在另一个类中的任何类,无论是否为static

答案 2 :(得分:0)

您的问题是,您正在尝试在构建Child之前尽早创建SubParent,然后才能在内部类创建中将其用作“this”。除了之前的建议,您可以更改Parent以使其无参数构造函数和其SubParent引用的setter:

  public Parent(){

  }

  public void setSub(SubParent sp){

  }

Child构造函数可以等到超级调用之后创建SubParent:

class Child extends Parent
{
   public Child()
   {
      setSub(new SubParent());
   }
}