我收到一个错误:
Exception in thread "main" java.lang.StackOverflowError
at CreateCardDeck.<init>(CreateCardDeck.java:6)
at CardStack.<init>(CardStack.java:7)
at CreateCardDeck.<init>(CreateCardDeck.java:8)
at CardStack.<init>(CardStack.java:7)
at CreateCardDeck.<init>(CreateCardDeck.java:8)
...
...
...
at CardStack.<init>(CardStack.java:7)
at CreateCardDeck.<init>(CreateCardDeck.java:8)
但是我不明白为什么会报错。在我的代码中,我指定了卡片数量等。那么这里会出现什么问题?
public class CreateCardDeck
{
int deckSize = 52;
CardStack cardStack;
CreateCardDeck()
{
cardStack = new CardStack(deckSize); --------------- problem here -----
}
}
和
class CardStack extends CreateCardDeck
{
public CardStack(int s) ------------ problem here --------------
{
maxSize = s;
stackArray = new Card[maxSize];
top = -1;
}
......
}
最佳答案
您通过让 CardStack 扩展 CreateCardStack 无意中使用了递归。不要在这里使用继承。除了导致您的 StackOverflowError 错误之外,这完全是错误的。 CardStack 不是 CreateCardStack 的更专业版本,因此不应扩展它。事实上,CardStack 应该根本不知道 CreateCardStack。
你的递归和 SO 错误:
您的 CardStack 构造函数将默认调用 super 的构造函数,该构造函数创建另一个 CardStack 对象,该对象的构造函数默认调用 super 的构造函数,该对象创建另一个 CardStack 对象,该对象的构造函数默认调用 super 的构造函数,该构造函数创建另一个 CardStack 对象构造函数将默认调用 super 的构造函数,该构造函数创建另一个 CardStack 对象,该对象的构造函数默认调用 super 的构造函数,该对象创建另一个 CardStack 对象,其构造函数.....几乎无穷无尽,直到内存耗尽。
关于java - 我不确定如何修复堆栈溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13485633/