在子类中调用父类的方法时的stackoverflow

时间:2015-04-06 06:47:45

标签: java

我试图在子类中调用父方法。但我收到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();
}

}

3 个答案:

答案 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)

StackOverflow Error

  

因应用程序递归而发生堆栈溢出时抛出   太深了。

问题是

void display() {
    display();  // this line is culprit you are calling the same function again and again 
    System.out.println("k=" + k);
}

您应该调用父级的显示方法