Java将此设置为超级参数

时间:2017-08-22 17:31:39

标签: java class super

我目前正在使用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:对于误导性的标题感到抱歉,我不确定该怎么称呼它!

1 个答案:

答案 0 :(得分:0)

首先要做的事情是:你需要修改你做这些课程的方式。

GameLoop延长了Game,这意味着任何GameLoop本身也是Game。您的GameLoop类中有一个Game实例,您在构造函数中将其设置为新的GameLoop。但是GameLoopGame,因此当您创建新的GameLoop时,您将创建一个新的Game,它会调用构造函数,从而创建另一个构造函数。 ..它是创建新对象的无限循环,结果最终是StackOverflowError

您需要决定:GameLoopGame的一种类型吗?或GameLoopGame的一部分? (或者,也许是Game GameLoopGameLoop的东西?)如果GameGame所拥有的,但不是GameLoop Game然后GameLoop不应该扩展Game。如果GameLoop实际上属于Game类型,则game.nameprivate String name() { return game.name; } 可能不应包含对彼此的引用。

无论如何,这并没有真正回答这个问题,所以我会尝试这样做。如果您真的不喜欢在大多数代码中使用name(),那么另一种方法是使用方法。

game.name

现在,在课程的其他部分,您可以使用sudo python server.py 代替echo this is a test | nc -u localhost 514 。不过,我真的不确定你为什么要这样做。一旦你重新思考你的课程如何相互关联,整个事情就变得不必要了。