超级构造函数不将值传递给render方法

时间:2014-03-12 02:46:43

标签: java constructor super

我创建了一个可以调用的类来存储我的类的x和y值。但是,当我调用超级构造函数时,值不会被传递。

这是我在主类中创建Player类的新实例的地方。

p = new Player(getWidth() / 2, getHeight() / 2, this);

这是我正在为我的超级构造函数调用的类

public class GameObject {

public int x;
public int y;
public GameObject(int x, int y){    
    this.x = x;
    this.y = y;
}
}

这是我的类调用超级构造函数

public class Player extends GameObject implements EntityA{

private int x = 0;
private int y = 0;
Game game;
BufferedImage spriteSheet;
Rectangle bounds;

public Player(int x, int y, Game game){
    super(x, y);
    this.game = game;
    bounds = new Rectangle(x, y, Game.spriteSize, Game.spriteSize);
    spriteSheet = game.getSpriteSheet();
    System.out.println("x: " + this.x + " this.y: " + y);

}

x和y都具有零值。我可以看到我没有正确使用超级构造函数的调用。有人能告诉我如何做到这一点。谢谢。

2 个答案:

答案 0 :(得分:0)

问题不在于构造函数,而在于这些类的字段。您在public int x中定义了yGameObject,在private int x中定义了yPlayer

GameObject.x隐藏Player.x。但是,GameObject的构造函数仍将GameObject.x设置为给定值。如果您然后尝试查询Player.x是什么,那么它仍为零。

答案 1 :(得分:0)

Player构造函数中,此行

System.out.println("x: " + this.x + " this.y: " + y);

正在使用Playerx y 版本,这些版本被您的代码忽略,因此具有int的默认初始值,这是零。我想你想要消除这个

private int x = 0;
private int y = 0;

来自您的Player课程,这会导致您的代码访问GameObjectxy,这是您的目标。