Java 将此设置为 super 参数



我目前正在用Java开发一个游戏,我有以下代码:

public class Game extends Thread {
public String name = "randomName";
public int state=0;
public GameLoop gameLoop;
public Game(){
gameLoop = new GameLoop(this);
}
public void run(){ // when the thread starts
name="UpdatedName";
}
}

public class GameLoop extends Game{
public GameLoop(Game game){
System.out.println(game.name); //UpdatedName
System.out.println(name); // randomName, I want UpdatedName here!
}
}

我想要实现的是能够在 GameLoop 类中使用"name"而不是 game.name。无论如何,这是否可能,我最好的猜测是super((命令,但不确定如何设置它,尝试了以下内容,但没有太多运气:

public class Game extends Thread {

public String name = "randomName";
public int state=0;
public GameLoop gameLoop;
public Game(Game game){
this = game;
}
public Game(){
gameLoop = new GameLoop(this);
}
public void run(){ // when the thread starts
name="UpdatedName";
}
}
public class GameLoop extends Game{
public GameLoop(Game game){
super(game);
System.out.println(game.name); //UpdatedName
System.out.println(name);  too!
}
}

我错过了什么还是这是不可能的?这样做的唯一原因是使代码本身更干净。我能想到的唯一解决方案是:

public class Game extends Thread {
public String name = "randomName";
public int state=0;
public GameLoop gameLoop;
public Game(Game game){
name = game.name;
state = game.state;
// ...
}
public Game(){
gameLoop = new GameLoop(this);
}
public void run(){ // when the thread starts
name="UpdatedName";
}
}

这可能有效,但由于我有很多变量,因此非常丑陋。感谢您的任何帮助!

PS:对不起,误导性的标题,我真的不知道该怎么称呼它!

首先要做的是:你需要修复你做这些类的方式。

你必须GameLoop扩展Game,这意味着任何GameLoop本身也是GameGame类中有一个GameLoop实例,在构造函数中将其设置为新GameLoop。 但是GameLoop是一个Game,所以当你创建一个新的GameLoop时,你正在创建一个新的Game,它调用构造函数,构造函数创建另一个...这是一个创建新对象的无限循环,最终的结果是StackOverflowError

您需要决定:GameLoop是一种Game吗? 还是GameLoopGame拥有的东西? (或者,也许,GameGameLoop拥有的东西吗? 如果GameLoopGame拥有的东西,但不是Game,那么GameLoop不应该扩展Game。 如果GameLoop实际上是一种Game,那么GameLoopGame可能不应该包含对彼此的引用。

无论如何,这并不能真正回答这个问题,所以我会尝试这样做。 如果您确实不喜欢在大多数代码中使用game.name,一种替代方法是使用方法。

private String name()
{
return game.name;
}

现在,在类的其余部分,您可以使用name()而不是game.name。 不过,我真的不确定你为什么要这样做。 一旦你重新思考你的类是如何相互关联的,整个事情可能会变得没有必要。

相关内容

  • 没有找到相关文章