stackoverflow同时调用子类中的父类的方法
我想调用子类中的父方法。但我越来越stackoverflow错误。这两个类中的方法名称都是相同的。如果我更改方法名称,它不会给出错误。我不理解背后的原因。下面是我调用display()方法的代码,这两个类都给了我stackoverflow错误。如果我改变任何一个类的方法名称,它不会给我错误。stackoverflow同时调用子类中的父类的方法
class inherit1 {
int i;
int j;
int k;
public inherit1() {
}
inherit1(int i, int j, int k) {
this.i = i;
this.j = j;
this.k = k;
}
void display() {
System.out.println("i=" + i + "j=" + j + "k=" + k);
}
}
class in1 extends inherit1 {
int l;
in1() {
}
public in1(int i, int j, int k, int l) {
super(i, j, k);
this.l = l;
}
void display() {
display();
System.out.println("l=" + l);
}
public static void main(String[] args) {
in1 i = new in1(12, 12, 12, 12);
i.display();
}
}
变化
void display() {
super.display();
System.out.println("k=" + k);
}
当你调用
display()
它调用同一个孩子的方法againg,再次引起
stackoverflow
。相反,你应该使用
super
关键字
引用父方法。
时发生堆栈溢出,因为应用程序递归 太深抛出。
问题是
void display() {
display(); // this line is culprit you are calling the same function again and again
System.out.println("k=" + k);
}
你应该叫家长的显示方法,而不是
调用父显示我不会得到子类方法 – nikalldway 2015-04-06 06:58:48
如果你不想让父母的方法被调用,那么你应该简单地删除'display()'的调用 – 2015-04-06 07:03:53
我想调用父方法和子类,具有相同的方法名称。 – nikalldway 2015-04-06 07:25:48
void display() {
display();
System.out.println("k=" + k);
}
采用此方法保留再次调用同样的方法,这反过来又导致StackOverflow的错误,因为你创造了一个无限循环。
这将更好地工作:
void display() {
super.display();
System.out.println("k=" + k);
}
甚至这会工作:
void display() {
System.out.println(super.display() + ("k=" + k));
}
感谢super.display之后,我可以调用这两种方法 – nikalldway 2015-04-06 07:01:21
我也做了改变,它仍然给错误 – nikalldway 2015-04-06 06:53:49
@nikalldway我已经尝试过了,它工作了我,你是如何通过cmd或IDE运行的? – silentprogrammer 2015-04-06 07:04:00
我正在通过IDE使用。它正在工作。 Thankyou – nikalldway 2015-04-06 07:23:41