我的超类:
public class Node {
public MyPoint myPoint = new MyPoint();
}
我的空子类:
public class MyPoint extends Node {
}
以下问题是我所能找到的最接近的问题,但是在这种情况下,我的子类为空,没有构造函数。
Calling a subclass constructor from a superclass
我收到以下错误:
Exception in thread "JavaFX Application Thread" java.lang.StackOverflowError
...
at engine.MyPoint.<init>(MyPoint.java:3)
at engine.Node.<init>(Node.java:28)
at engine.MyPoint.<init>(MyPoint.java:3)
at engine.Node.<init>(Node.java:28)
at engine.MyPoint.<init>(MyPoint.java:3)
at engine.Node.<init>(Node.java:28)
...
我不明白为什么以及为什么没有递归。 怎么样
public MyPoint myPoint = new MyPoint();
与之不同(例如,在JavaFX中),而创建一个新的组并不会给我错误吗?
public Group group = new Group();
答案 0 :(得分:5)
MyPoint
扩展了Node
,因此,在创建MyPoint
的实例时,首先必须初始化其父级Node
。这意味着初始化myPiont
成员,依此类推,直到获得StackOverflowError
。
这里没有足够的上下文来建议更改,但是您可能应该失去此成员。
答案 1 :(得分:1)
如果您的Node类绝对需要MyPoint字段,则可以选择以下几种方法:
public class Node {
public MyPoint myPoint = new MyPoint();
}
对此:
public class Node {
public MyPoint myPoint; // note that MyPoint NOT created here
public Node(MyPoint myPoint) {
this.myPoint = myPoint; // but rather passed in HERE
}
}
这样,您不必每次创建Node时都递归创建Node对象,而是将MyPoint实例的创建与Node实例分开。可替代地,这也可以使用设置方法来解决。