1 java constructor-overloading constructor-chaining
无法提出更好的标题。
一个经典的学习示例:class Human,其中属性是姓名,年龄,母亲和父亲。父母双方Human也是。
public class Human {
String name;
int age;
Human mother;
}
Run Code Online (Sandbox Code Playgroud)
我想创建3个构造函数:
Human();Human(String name, int age);Human(String name, int age, Human mother)。我想我确实了解链接的工作原理,这就是我所做的:
Human() {
this("Jack", 22);
}
Human(int age, String name) {
this(age, name, new Human()); // new Human() will cause SOF Error.
}
Human(int age, String name, Human mother) {
this.age = age;
this.name = name;
this.mother = mother;
}
Run Code Online (Sandbox Code Playgroud)
如上所述,我StackOverflowError再次收到,我想我知道为什么会这样。公平地说,我想我会得到像人类杰克这样的东西,而他的母亲也是人类杰克。
尽管如此,我不知道该怎么做。我的猜测是,而不是new Human()我应该使用所有参数来调用构造函数,但是我不确定它是否为真并且是唯一可用的选项。
将不胜感激这里的任何指导。
是的,您对它为什么会发生是正确的。不过要确定的是:
new Human() 来电 this("Jack", 22)this("Jack", 22) 来电 this(age, name, new Human())new Human()在调用this("Jack", 22)再次this(age, name, new Human())再次打电话正确的方法是确保您不会回到起点。因此,如果在任何构造函数中使用new Human(String)或new Human(String, int),则必须确保该构造函数(new Human(String)或new Human(String, int))也不要使用new Human(String)或new Human(String, int),因为这样会导致无限循环。您需要在new Human(String, int, Human)某个地方使用。因此,例如:
Human(int age, String name) {
this(age, name, null);
}
Run Code Online (Sandbox Code Playgroud)
当然,这意味着新的实例将拥有null的mother。
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |