2013-03-29 254 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',那么你就调用了可以被覆盖的方法。在这种情况下,超类的构造函数会在完全初始化之前从子类调用方法。这是一个非常隐蔽的错误。 –