2013-03-29 253 views
4

我正在做家庭作業。我很困惑它應該如何完成。Java - 使用Accessor和Mutator方法

的問題是:

創建一個名爲IDCard類,它包含一個人的姓名,身份證號, 以及含有人的photogrpah文件的名稱。爲每個這些字段寫入 訪問器和增變器方法。在 以下兩個重載的構造函數添加到類:

公共IDCard()公共IDCard(字符串n,INT ID,字符串文件名)

測試程序通過創建使用這兩個 建設者和打印出不同ojbects它們的值在控制檯上使用 訪問器和增變器方法。

我已經重新寫了這個至今:

public class IDCard { 
String Name, FileName; 
int ID; 

public static void main(String[] args) { 

} 

public IDCard() 
{ 
    this.Name = getName(); 
    this.FileName = getFileName(); 
    this.ID = getID(); 
} 

public IDCard(String n, int ID, String filename) 
{ 

} 

public String getName() 
{ 
    return "Jack Smith"; 
} 

public String getFileName() 
{ 
    return "Jack.jpg"; 
} 

public int getID() 
{ 

     return 555; 
    } 
} 
+1

你被阻止了什麼? – smk

+2

訪問者不應該是靜態的。 – sp00m

+0

你有幾十個關於封裝的教程。另外,尊重命名約定。 –

回答

29

讓我們來看看基礎知識: 「訪問器」和「變異器」只是一個吸氣者和設置者的奇特名字。 getter,「Accessor」,返回一個類的變量或其值。設置者「Mutator」設置類的變量或其值。

所以首先你需要設置一類具有一些變量的get/set:

public class IDCard 
{ 
    private String mName; 
    private String mFileName; 
    private int mID; 

} 

但是哦,不!如果你實例化這個類,這些變量的默認值將是沒有意義的。 B.T.W. 「實例化」是做一個奇特的一句話:

IDCard test = new IDCard(); 

所以 - 讓我們建立一個默認的構造函數,這是當你「實例」一類被調用的方法。

public IDCard() 
{ 
    mName = ""; 
    mFileName = ""; 
    mID = -1; 
} 

但是如果我們知道我們想要給出變量的值呢?因此,讓我們製作另一個構造函數,其中需要參數:

public IDCard(String name, int ID, String filename) 
{ 
    mName = name; 
    mID = ID; 
    mFileName = filename; 
} 

哇 - 這很好。但愚蠢。因爲我們無法訪問(=讀取)我們變量的值。因此,讓我們添加一個吸氣劑,然後添加一個吸氣劑:

public String getName() 
{ 
    return mName; 
} 

public void setName(String name) 
{ 
    mName = name; 
} 

不錯。現在我們可以訪問mName。添加其餘的訪問器和增變器,你現在是一個經過認證的Java新手。 祝你好運。

+0

我終於搞清楚了。我對C#很熟悉,我做了一些非常複雜的程序,但現在我正在學習Java,而得到我的是錯誤之後我不斷收到錯誤。我開始使用Eclipse,並一直告訴我:使用這個..沒有使用這個..不使用這個,我想它殺了我的代碼到你們看到的。 謝謝。 – Pichu

+1

令人驚歎的解釋方式。 – ashishdhiman2007

2

您需要刪除您的訪問方法的static - 這些方法必須是實例方法和訪問實例變量

public class IDCard { 
    public String name, fileName; 
    public int id; 

    public IDCard(final String name, final String fileName, final int id) { 
     this.name = name; 
     this.fileName = fileName 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 
} 

您可以創建IDCard並使用像這樣的訪問器:

final IDCard card = new IDCard(); 
card.getName(); 

每次您撥打new時,都會創建IDCard的新實例,並且它將擁有3個變量的自己副本。

如果您使用static關鍵字,那麼這些變量在IDCard的每個實例中都是通用的。

幾件事情要記住:

  1. 不添加無用註釋 - 它們添加代碼雜亂,沒有別的。
  2. 符合命名約定,使用小寫變量名 - name不是Name
+0

我必須添加評論作爲提交要求的一部分。 我修改了它,並更新了與我目前爲止的主要帖子。 – Pichu

+0

Boris,在構造函數中添加訪問器是一種很好的做法嗎? –

+1

@VasileSurdu no。除非你的訪問器是'final',那麼你就調用了可以被覆蓋的方法。在這種情況下,超類的構造函數會在完全初始化之前從子類調用方法。這是一個非常隱蔽的錯誤。 –