0

我有一个名为 Queen 的类,它是 Ant 的子类。Queen 的构造函数接受参数,并将这些参数传递给 Ants 构造函数,以及 Queen 的其他细节。现在,这就是它应该如何工作的方式。但是我发现 Ant 构造函数从未被调用过。我错过了什么吗?

public class Queen extends Ant
{
    public Queen(int width, int height, Square[][] grid)
    {
        super(0, 0, width, height);
        //grid[locationHeight][locationWidth].addQueen(this);
    }
}

Ant 构造函数(我在这里有一些 println 语句,但在构造皇后时从未调用过它们):

public Ant(int id, int type, int width, int height)
    {
        antID = id;
        antType = type;
        isAlive = true;
        width = width / 2;
        height = height / 2;
        setLocation(width, height);
        if (antType == 0)
        {
            lifeSpan = 73000;
        }
        else
        {
            lifeSpan = 3650;
        }
    }
4

2 回答 2

3

在 Java 构造函数中总是调用它的超级构造函数。它要么隐式调用无参数父构造函数,要么您指定要调用的构造函数(这就是如果您的超类未指定默认构造函数,则必须调用超级构造函数的原因)。

java规范

如果构造函数体不是以显式构造函数调用开始,并且被声明的构造函数不是原始类 Object 的一部分,则构造函数体隐式以超类构造函数调用“super();”开始,调用它的直接超类不带参数。

对于您的代码示例:如果没有完整的代码,很难知道发生了什么,但是如果 Queen 扩展了 Ant,并且显示的构造函数是唯一的,它应该可以工作。

于 2013-05-01T20:44:40.427 回答
2

您没有使用 Queen(int,int,Square[][]) 构造函数实例化您的 Queen 对象,您必须使用另一个构造函数或根本没有实例化 Queen。

于 2013-05-01T20:23:15.100 回答