-2

我正在关注有关多种方法和实例的一系列教程。作者没有详细说明某些元素的细节。

你为什么认为他会将方法 setName 放在“public void”中,然后使用“public String getName”获得回报。为什么他不直接将返回的 randomName 放在 public void 中,并在 public void 中声明字符串 g?

public class voidvoid {

private String randomName;

public void setName(String name){
    randomName = name;

}
public String getName () {
    return randomName;
}

public void saying () {
    System.out.printf("you are %s", getName());
}


}
4

5 回答 5

3

它被称为封装。

隐藏对象的内部结构可以防止用户将组件的内部数据设置为无效或不一致的状态,从而保护其完整性。封装的一个好处是它可以降低系统复杂性,从而通过允许开发人员限制软件组件之间的相互依赖关系来提高鲁棒性。

更多信息:http ://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming )

于 2012-09-10T00:08:09.077 回答
1

使用 public void 设置变量的值并使用 public 获取变量的值是“正确”的方法。您可以搜索“java 中的 getter 和 setter”以获取有关该主题的更多信息。基本上,这在获取和设置变量的值方面提供了对存储名称的公共访问。say() 方法显示了 getter 方法的使用,在本例中为 getName()。请注意,变量本身被声明为私有的。这意味着除非您扩展此类,否则您无法从此类外部访问变量,除非通过 getter 和 setter。例如说你不喜欢 Fred 这个名字。在您的 setName(String name) 方法中,您可以说:

if(name.equals("Fred") {
   randomName = "Jon Doe";
}

任何时候有人尝试设置名称“Fred”,它都会被保存为“Jon Doe”。如果他们可以直接访问该变量,他们可以随时将值设置为“Fred”。这意味着您可以最终控制通过您的方法进入变量的内容。

于 2012-09-10T00:16:11.987 回答
1

当一个方法设置一个类的属性时,它被称为setter方法:

public void setName(String name)

由于您只能randomename使用此方法设置类的属性,因此通常不需要返回类型。但是如果你愿意,你当然可以添加一个返回类型。如 :

//this method will return true if the `randomname` was not set previously 
//otherwise false
public boolean setName(String name) {
    if (null == randomname )  { 
        randomname = name;
        return true;  
    }
    else return false;    
}

与 setter 方法类似,如果您可以使用通常称为getter方法的方法获取属性:

public String getName(String name)

Saying 方法用于打印randomname属性。它是必需的,因为您不能打印randomname类范围的外部,因为它是私有的:

//this will print the value of randomname
public void saying ()

//another scenario
voidvoid foo = new voidvoid () ;
foo.setName("Hello world") ;

//this line will generate an erro
System.out.println (foo.randomname) ; 

//this will compile fine
foo.saying () ;

//you can also achieve the same result using getName
System.out.println (foo.getName() ) ; 

如果您想要属性,则拥有private属性的 setter/getter 方法,但对于属性,但在我看来,这是一个拥有它的方法。mandatoryretrieve/setoptionalpublicgood practice

于 2012-09-10T00:29:23.903 回答
0

它不仅仅是向最终用户展示所封装内容的价值。在许多程序中,最终用户永远看不到输出到 stdout(System.out 输出的地方) 。您的对象可能需要它String以供以后参考,因此将其拉出而不是将其输出到 stdout 会更有益。

至于getNamesetName - 这些分别是访问器和修改器

访问器需要检索有关特定变量的信息,因此预期的返回类型是您需要的变量类型。由于您要返回 a String,因此您会期望getName返回String,因为变量randomName是 a String

mutator 只需要更改内部变量的值,通常是在某些条件下。这里不需要返回任何东西,因此返回值为void. 通常你会看到返回boolean值表示成功或失败的 mutators,但在我看到的例子中,返回值在很大程度上被忽略了。

于 2012-09-10T00:17:09.613 回答
0

为什么他不把返回的 randomName 放在 public void 中

我不明白这个问题。他把它放在public static String getName()方法里面。他还能把它放在哪里?

在公共无效说方法中声明字符串 g?

因为这会使它成为局部变量而不是实例成员,所以你不能用其他方法设置它。

于 2012-09-10T05:02:35.350 回答