2009-10-28 131 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;