Java I';我不确定如何修复堆栈溢出错误

Java I';我不确定如何修复堆栈溢出错误,java,stack-overflow,Java,Stack Overflow,我得到一个错误: 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.<

我得到一个错误:

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)


通过让CardStack扩展CreateCardStack,您无意中使用了递归。这里不要使用继承。除了导致StackOverflower错误之外,这完全是错误的。CardStack不是CreateCardStack的更专业的版本,因此不应该扩展它。事实上,CardStack应该根本不了解CreateCardStack

您的递归和其他错误:


默认情况下,您的CardStack构造函数将调用创建其他CardStack对象的super构造函数,其构造函数将默认调用创建其他CardStack对象的super构造函数,其构造函数将默认调用创建其他CardStack对象的super构造函数,其构造函数将默认调用创建其他CardStack对象的super构造函数,其构造函数将默认调用创建其他CardStack对象的super构造函数,其构造函数。。。。。几乎无限大,直到内存耗尽。

您无意中使用了递归,因为CardStack扩展了CreateCardStack。这里不要使用继承。除了导致StackOverflower错误之外,这完全是错误的。CardStack不是CreateCardStack的更专业的版本,因此不应该扩展它。事实上,CardStack应该根本不了解CreateCardStack

您的递归和其他错误:


默认情况下,您的CardStack构造函数将调用创建其他CardStack对象的super构造函数,其构造函数将默认调用创建其他CardStack对象的super构造函数,其构造函数将默认调用创建其他CardStack对象的super构造函数,其构造函数将默认调用创建其他CardStack对象的super构造函数,其构造函数将默认调用创建其他CardStack对象的super构造函数,其构造函数。。。。。几乎无限长,直到内存耗尽。

CardStack从CreateCardDeck继承。CreateCardDeck的构造函数实例化CardStack,这会导致再次调用CreateCardDeck的构造函数,以此类推


我建议重新安排和设计您的代码。CreateCardDeck看起来像方法的名称(因为它以动词开头)。可能您需要的实际上是CardStack中名为createCardDeck的静态方法。

CardStack继承自createCardDeck。CreateCardDeck的构造函数实例化CardStack,这会导致再次调用CreateCardDeck的构造函数,以此类推


我建议重新安排和设计您的代码。CreateCardDeck看起来像方法的名称(因为它以动词开头)。也许您想要的实际上是CardStack中一个名为createCardDeck的静态方法。

是否需要CardStack来扩展createCardDeck?是否需要CardStack来扩展createCardDeck?@HelpNeeder:这是查看它的唯一方法。:)@求助者:这是唯一看问题的方法
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;
    }
......
}