2015-04-06 95 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