我试图在子类中调用父方法。但我收到stackoverflow错误。这两个类中的方法名称是相同的。如果我更改方法名称,则不会出错。我不明白它背后的原因是什么。下面是我调用display()方法的代码,在这个类中给出了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();
}
}
答案 0 :(得分:2)
更改
void display() {
super.display();
System.out.println("k=" + k);
}
当您致电display()
时,它会调用相同的子方法,并再次导致stackoverflow
。相反,您应该使用super
关键字来引用父方法。
答案 1 :(得分:1)
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));
}
答案 2 :(得分:0)
因应用程序递归而发生堆栈溢出时抛出 太深了。
问题是
void display() {
display(); // this line is culprit you are calling the same function again and again
System.out.println("k=" + k);
}
您应该调用父级的显示方法