我收到一个错误:

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对象,其构造函数.....几乎是无限的,直到内存用完。

10-02 04:05