2011-10-22 75 views
0

我正在嘗試創建一些稱爲問題的相同自定義對象類型的實例。問題類具有getter函數來返回問題的答案。如果我只創建一個問題對象,那麼一切正常,但如果我在調用getter函數時創建了兩個具有不同名稱和變量的對象,則始終會返回最近初始化的Question對象的值。使用同一對象類型的多個實例工作的問題

這就是我的意思是:

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 

我期待着以顯示兩個不同的問題。

任何人都可以指向正確的方向嗎?

+1

你的類中的變量是靜態的嗎? –

+2

向我們展示'Question'的代碼 –

+0

我們需要看到更多的代碼,例如'Question'的實現,以及您調用'System.out.println()'的部分。只要看看你發佈的內容,沒有什麼看起來錯誤,並且不可能找到錯誤 –

回答

4

沒有看到代碼,我只能猜測,但它似乎好像Question類有一個靜態變量,而不是一個成員變量。

這就是爲什麼有些人主張總是使用this.questionthis.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; } 

} 
+0

我確實有變量設置爲靜態!非常感謝你的幫助! – TrueWheel

+0

只要你知道,靜態意味着它們屬於Question類本身。這就像一個社區變量。移除靜態使其成爲創建的單個對象的一部分。 (注意班級和部分對象之間的區別,班級是製作對象的模具,這不是一個完美的比喻,但它起作用:) – corsiKa

0

當您使用new運營商,創建一個新的對象肯定。但是,如果在您的類中聲明瞭static字段,它將在特定類的所有實例中共享。因此,static的使用將是這種行爲的原因。

+0

感謝您的幫助! – TrueWheel

相關問題