[英]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.