【发布时间】:2017-08-23 02:20:14
【问题描述】:
我目前正在用 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:抱歉标题误导了,我真的不知道该怎么称呼它!
【问题讨论】:
-
A) 我不太明白你打算做什么 B) 你的问题可能太宽泛了。基本上,你会是一个有经验的人和你坐下来谈论你的想法......以及解决方案......几个小时。也许您可以退后一步,先告诉我们
name应该为您做什么。你看 - 在一个类中拥有一个 other 类可以直接读取或写入的字段首先是一个坏主意.... -
听起来
name应该通过getter 而不是字段来访问,GameLoop的实现应该只委托给game对象。 -
由于 gameloop 扩展了游戏,公共实例变量名称可用并且应该可以通过该名称访问。你看到了什么问题?使用 super 是多余的;如上所述,与公共变量相比,使用 getter 可能更安全
-
如果它是一个扩展对象,getter 是不必要的
-
你的继承没有任何意义。此外,您应该考虑实现
Runnable接口,而不是扩展Thread。