繁体   English   中英

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

[英]Calling a parent's inner class in a super call Java

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

public class Parent
{
   public class SubParent
   {
   }

   public Parent(SubParent sp)
   {
   }
}

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

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

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

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

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

super(new SubParent());

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

要么在自己的文件中声明SupParent ,要么将其设置为static 无论如何,你想要达成什么样的关系?

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

请注意, 内部类 (不是static (具有对其包含类的实例的引用)和嵌套类之间存在区别, 嵌套类是包含在另一个类中的任何类,无论是否为static类。

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

  public Parent(){

  }

  public void setSub(SubParent sp){

  }

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM