簡體   English   中英

訪問器和變量方法的混淆

[英]Accessor and Mutator Methods confusion

好,基本上問題是

Accessor和Mutator方法假設Pet類具有一個名為name的變量/字段,其類型為String>

編寫一個訪問器方法getName()返回name的值在此框中輸入答案

我寫的代碼如下:

public getName(String name)
{
    return name;
}

編寫一個變幅方法setName(),其返回類型為void,當寵物更改所有者時,可用於更改name的值。 在此框中輸入答案

我寫如下:

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

任何想法有什么問題嗎?

您的方法簽名都不正確:

  • 正如您所提到的,name是String ,但是您的mutator方法采用一個int ,即整數作為其輸入。 將其切換為字符串,它應該可以工作。
  • 您的訪問器實際上並不返回內部名稱的值,而是返回給它的名稱參數。 這是一個錯誤,因為訪問器應返回類的內部保存的值( 的副本 )。 它還缺少返回類型,該類型當然應該與字段的返回類型匹配。

哦,為了澄清一下, 方法簽名是方法的整個聲明,基本上是您為聲明方法而編寫的所有內容:

  • 名字是顯而易見的。
  • 返回值是方法簽名的一部分,由於它是強制性的,因此非常重要。
  • 可見性( public / package / protected / private )也很重要,因為它定義了誰可以訪問實際方法。
  • 參數當然是方法簽名的一部分,因為即使方法的其他部分與名稱完全相同,參數也可以使方法完全唯一。 甚至零個參數也算作簽名的一部分!

之所以稱其為簽名,是因為這四個一起形成一個唯一的組合,該組合充當該方法的唯一標識符,並且您需要所有四個都具有一個具有唯一簽名的完全聲明的方法。 訪問器/更改器的整個思想依賴於方法簽名的某種模式,該模式使每個人都可以以預先定義的便捷方式訪問它們。

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

仔細閱讀錯誤消息:“返回類型為必需的公共getName(String name)”。

您的訪問器應為:public String getName(){返回名稱; }

您的更改器應為:public void setName(String newName){name = newName; }

並且您的數據應該像這樣被保護

私有字符串名稱;

我的建議是考慮所有注釋,在JAVA中使用某些IDE進行開發,例如Eclipse ,IDE將最終改善您的開發時間,並避免坑窪。

讀取錯誤消息: return type required public getName(String name)這意味着您需要該方法的返回類型。 您需要在void之后添加String ,這樣您將擁有:

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

您還需要將setName方法中的int更改為String

並且您需要確保在代碼的開頭創建變量名:

private String name;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM