构造函数存在以下问题。我试图重写Cel
的函数,GameObject
是GameObject
的一个子类(x
需要y
,width
,height
,id
和xPosGrid
)。我想添加yPosGrid
和//Constructor that does work
public Cel(int x, int y, int width, int height, ID id) {
super(x, y, width, height, id);
}
//Constructor that doesn't work
public Cel(int xPosGrid, int yPosGrid, Grid grid, ID id) {
x = grid.x + grid.celWidth * xPosGrid;
y = grid.y + grid.celHeight * yPosGrid;
width = grid.celWidth;
height = grid.celHeight;
this.id = id;
this.xPosGrid = xPosGrid;
this.yPosGrid = yPosGrid;
}
//GameObject Constructor
public GameObject(int x, int y, int width, int height, ID id) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
this.id = id;
}
以确保我知道网格中所有Cels的位置。但是我并不想让构造函数变得非常长。所以我想使用第二个构造函数(下面)。
但这给了我一个错误
隐式超级构造函数GameObject()未定义。必须显式调用另一个构造函数
任何人都可以告诉我如何解决这个问题。非常感谢。
std::string
答案 0 :(得分:1)
您总是需要先在构造函数中调用超级构造函数。
public Cel(int x, int y, int width, int height, ID id) {
super(x, y, width, height, id);
}
public Cel(int xPosGrid, int yPosGrid, Grid grid, ID id) {
super(0,0,0,0,id);
x = grid.x + grid.celWidth * xPosGrid;
y = grid.y + grid.celHeight * yPosGrid;
width = grid.celWidth;
height = grid.celHeight;
this.id = id;
this.xPosGrid = xPosGrid;
this.yPosGrid = yPosGrid;
}
如果您可以稍后设置x和y以及宽度和高度,则可以对其进行修改
public Cel(int xPosGrid, int yPosGrid, Grid grid, ID id) {
super(0,0,0,0,id);
x = grid.x + grid.celWidth * xPosGrid;
y = grid.y + grid.celHeight * yPosGrid;
width = grid.celWidth;
height = grid.celHeight;
this.id = id;
this.xPosGrid = xPosGrid;
this.yPosGrid = yPosGrid;
// do some calculations to caluclate the pos and dimensions.
this.setX(x);
this.setY(y);
this.setWidth(width);
this.setHeight(height);
}
答案 1 :(得分:0)
您的GameObject
似乎没有定义空构造函数。如果省略对super
的调用,Java会隐式添加super()
作为子构造函数的第一个语句。
解决方案:向GameObject
添加一个空构造函数(使protected
避免意外)或明确调用this
或super
。
答案 2 :(得分:0)
如果您不致电super(...)
或this(...)
,则编译器会添加super()
。正如错误告诉你的那样:没有没有参数的超级构造函数。因此,您需要添加此构造函数或使用虚拟值调用现有的超级构造函数。
答案 3 :(得分:0)
你错误。您不能拥有两个构造函数,并将它们称为两者作为同一个对象。
当你写new Cel()
时......你必须准确地给出与你的consturctors的一个匹配的参数。
您以后无法进入并调用其他构造函数。从这个意义上说:了解子类的基本属性是什么,然后提供一个构造函数来适应该模型。