2015-04-06 64 views
0

我想调用子类中的父方法。但我越来越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(); 
} 

}

回答

2

变化

void display() { 
    super.display(); 
    System.out.println("k=" + k); 
} 
当你调用 display()它调用同一个孩子的方法againg,再次引起 stackoverflow。相反,你应该使用 super关键字

引用父方法。

+0

我也做了改变,它仍然给错误 – nikalldway 2015-04-06 06:53:49

+0

@nikalldway我已经尝试过了,它工作了我,你是如何通过cmd或IDE运行的? – silentprogrammer 2015-04-06 07:04:00

+0

我正在通过IDE使用。它正在工作。 Thankyou – nikalldway 2015-04-06 07:23:41

0

StackOverflow Error

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

问题是

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

你应该叫家长的显示方法,而不是

+0

调用父显示我不会得到子类方法 – nikalldway 2015-04-06 06:58:48

+0

如果你不想让父母的方法被调用,那么你应该简单地删除'display()'的调用 – 2015-04-06 07:03:53

+0

我想调用父方法和子类,具有相同的方法名称。 – nikalldway 2015-04-06 07:25:48

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)); 
} 
+0

感谢super.display之后,我可以调用这两种方法 – nikalldway 2015-04-06 07:01:21