2009-10-28 129 views
0

OK,基本問題是accessor和mutator方法混亂

accessor和mutator方法假設 該類寵物有 變量/字段名爲名稱是 類型爲String>

寫的訪問器方法getName() 返回名稱的值輸入 您在此框中的答案

和我寫的代碼如下:

public getName(String name) 
{ 
    return name; 
} 

寫賦值函數方法的setName()中,用 可以用於 改變名稱的值時 寵物改變所有者空隙的返回類型。在此框中

輸入您的答案 我寫如下:

public void setName(int newName) 
{ 
    name = newName; 
} 

我似乎感到困惑,因爲我沒有得到的標誌,我得到的錯誤是

Pet.java:9: invalid method 
declaration; return type required 
public getName(String name) 
     ^1 error The output should have been: 
    getName() works as expected 
    setName() works 

This is what was actually produced: 
    Exception in thread "main" java.lang.NoClassDefFoundError: Pet 

任何想法有什麼不妥之處?

回答

2

您的訪問者應該是: public String getName(){return name; }

您的變更應該是: public void setName(String newName){name = newName; }

和你的數據應該像這樣保護

private String name;

3

仔細閱讀錯誤消息:「返回類型必需public getName(String name)」。

4

你的方法簽名都是不正確的:

  • 名字是String正如你所說的,但你的賦值函數方法需要一個int這意味着整數作爲其輸入。切換到字符串,它應該工作。
  • 您的存取器實際上不會返回內部名稱的值,而是返回給定的名稱參數。這是錯誤的,因爲訪問者的意圖是返回(副本)該類內部保存的值。它也缺少返回類型,它當然應該匹配字段的返回類型。

哦,我只想澄清,方法簽名意味着該方法的整個聲明,基本上你寫一個方法聲明的一切:

  • 名稱是明顯的。
  • 返回值是方法簽名的一部分,因爲它是強制性的,所以非常重要。
  • 可見性(public/package/protected/private)也很重要,因爲它定義了誰可以訪問實際方法。
  • 參數當然是方法簽名的一部分,因爲即使方法的其他部分與名稱完全相同,參數也可以使方法完全唯一。即使是零參數也被視爲簽名的一部分!

它被稱爲簽字的理由當然是這四個一起形成一個獨特的組合,作爲一個唯一的標識符的方法,你需要的所有四有獨特的簽名完全聲明的方法。訪問者/修改者的整個想法依賴於方法簽名的特定模式,使得每個人都能夠以預定義的方式訪問它們。

NoClassDefFoundError通常意味着類路徑有問題,您需要實際將您的類添加到類路徑中才能運行它。

0

我的建議是關於所有評論,使用一些IDE在JAVA中進行開發,例如Eclipse,IDE將明確地改善您的開發時間,並防止在一些基本想法上陷入坑。

+0

它更好時,剛開始不使用這種方式,你學習一切的IDE,並沒有IDE爲你做一半的工作。 – 2009-10-28 21:02:35

0

閱讀錯誤消息:return type required public getName(String name) 這意味着您需要該方法的返回類型。你需要的空白之後添加String所以你必須:

public String getName(String name) 
{ 
    return name; 
} 

你還需要在你的setName方法來改變intString

而你需要確保你的代碼的開始創建變量名:

private String name;