我目前正在使用Java开发游戏,我有以下代码:
DoStuff
我想要实现的是能够在GameLoop类中使用“name”而不是game.name。无论如何这是可能的,我最好的猜测是super()命令,但不知道如何设置它,尝试以下没有太多运气:
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!
}
}
我错过了什么或者这不可能吗?这样做的唯一原因是使代码本身更清洁。我能提出的唯一解决方案是:
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!
}
}
哪个可能有效,但由于我有很多变数,所以非常难看。谢谢你的帮助!
PS:对于误导性的标题感到抱歉,我不确定该怎么称呼它!
答案 0 :(得分:0)
首先要做的事情是:你需要修改你做这些课程的方式。
您GameLoop
延长了Game
,这意味着任何GameLoop
本身也是Game
。您的GameLoop
类中有一个Game
实例,您在构造函数中将其设置为新的GameLoop
。但是GameLoop
是Game
,因此当您创建新的GameLoop
时,您将创建一个新的Game
,它会调用构造函数,从而创建另一个构造函数。 ..它是创建新对象的无限循环,结果最终是StackOverflowError
。
您需要决定:GameLoop
是Game
的一种类型吗?或GameLoop
是Game
的一部分? (或者,也许是Game
GameLoop
有GameLoop
的东西?)如果Game
是Game
所拥有的,但不是GameLoop
Game
然后GameLoop
不应该扩展Game
。如果GameLoop
实际上属于Game
类型,则game.name
和private String name()
{
return game.name;
}
可能不应包含对彼此的引用。
无论如何,这并没有真正回答这个问题,所以我会尝试这样做。如果您真的不喜欢在大多数代码中使用name()
,那么另一种方法是使用方法。
game.name
现在,在课程的其他部分,您可以使用sudo python server.py
代替echo this is a test | nc -u localhost 514
。不过,我真的不确定你为什么要这样做。一旦你重新思考你的课程如何相互关联,整个事情就变得不必要了。