所以,我早先碰到了一堵墙。如果我有一个类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作为其自己文件中的单独类,一切都很好。但我想把它作为一个内在阶级。有没有办法做到这一点?
答案 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());
}
}