同じオブジェクトタイプの複数のインスタンスでの作業の問題

java oop
同じオブジェクトタイプの複数のインスタンスでの作業の問題

Questionと呼ばれる同じカスタムオブジェクトタイプのインスタンスをいくつか作成しようとしています。 質問クラスには、質問と質問に対する回答を返すゲッター関数があります。 質問オブジェクトを1つだけ作成するとすべてが正常に機能しますが、ゲッター関数を呼び出すときに異なる名前と変数で2つ作成すると、常に最後に初期化された質問オブジェクトから値が返されます。

これが私の言っていることです。

Question q1 = new Question("What is the capital of France", "Paris");
Question q2 = new Question("What is the capital of England", "London");

System.out.println(q1.getQuestion());
System.out.println(q2.getQuestion());

コンソールにはディスプレイがあります

What is the capital of England
What is the capital of England

2つの異なる質問を表示する予定です。

誰かが私を正しい方向に向けることができますか?

  0  0


ベストアンサー

コードを見なくても推測することはできますが、 `Question`クラスにはメンバー変数ではなく静的変数があるように見えます。

このため、変数の先頭に常に「this.question」と「this.answer」を付けて、他のメンバー変数ではなく、メンバー変数を参照していることがわかる人がいます。 このようなバグはすぐに指摘されます。

あなたが持っているのであれば

class Question {
    private static String question;
    private static String answer;

    public Question(String q, String a) {
        question = q;
        answer = a;
    }

    public String getQuestion() { return question; }
    public String getAnswer() { return answer; }

}

静的を削除します

class Question {
    private String question;
    private String answer;

    public Question(String q, String a) {
        question = q;
        answer = a;
    }

    public String getQuestion() { return question; }
    public String getAnswer() { return answer; }

}

4


「new」演算子を使用すると、確実に新しいオブジェクトが作成されます。 しかし、クラスで宣言された `static`フィールドがある場合、特定のクラスのすべてのインスタンスで共有されます。 したがって、「静的」の使用がこの動作の原因になります。

0


タイトルとURLをコピーしました