没有调用Java构造函数

时间:2013-05-01 20:10:19

标签: java inheritance constructor super

我有一个名为Queen的类,它是Ant的子类。 Queen的构造函数接受参数,并将这些参数传递给Ants构造函数,以及后者的其他细节。现在,这就是它应该如何工作。但是我发现永远不会调用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;
        }
    }

2 个答案:

答案 0 :(得分:3)

在Java构造函数中,始终调用其超级构造函数。要么隐式调用no arg父构造函数,要么指定要调用的构造函数(如果超类没有指定默认构造函数,那么就必须调用超级构造函数)。

来自java specification

  

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

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

答案 1 :(得分:2)

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