これを設定します。私が達成しようとしている何Javaは、私は現在、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クラスの名前。これは多くの幸運せずに次のことを試してみました、私の最高の推測はそれを設定する方法がわからスーパー()コマンドではなく、とにかくすることで可能です:
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:誤解を招くタイトルで申し訳ありませんが、私は本当に何を呼び出すべきかわかりません!
A)私は本当にあなたがやろうとしていることを理解していませんB)あなたの質問はおそらく広すぎます。基本的には、経験豊富な人があなたと座ってあなたの考えを話しています。たぶんあなたは戻って、まずその名前があなたのために何をすべきかを教えてください。他のクラスが直接読み書きすることができるクラスにフィールドを持つことは、最初は悪い考えです。 – GhostCat
'name'のように、フィールドではなくゲッターでアクセスする必要があります。 'GameLoop'の実装は単に' game'オブジェクトに委譲すべきです。 –
gameloopがゲームを拡張するので、パブリックインスタンス変数名が利用可能であり、その名前でアクセス可能でなければなりません。あなたはどんな問題を抱えていますか?スーパーを使うことは余計です。上記のように、パブリック変数ではなくゲッターを使用する方が安全かもしれません。 – ryonts