2013-03-14 106 views
1
public class Score { 

    private String score; 


    public String getScore() { 
     return score; 
    } 
    public void setScore(String score) { 
     this.score = score; 
    } 

} 

在一个项目中,我发现这段代码setter和getter公约

这段代码的功能也有所容易的工作,但我不明白为什么让字符串如果分数私人二传手是公共的。对我来说,这看起来像是让公开制作者破坏私密性的感觉。

预先感谢您帮助我从新手转向至少一位程序员。

+1

在面向对象编程中区分公共和私人的全部观点是,你可以将它从它所做的事情中分离出来。安装者和获取者是抽象的,变量是具体的。 – Barmar 2013-03-14 15:13:24

回答

0

乍一看,它确实看起来像破碎的封装。但是,上述有两个优点。

  1. 执行。执行不是必须是String变量。 setter实现可以将其写入数据库,getter将检索它。
  2. 验证。只是揭露领域意味着你可以设置String为任何你想要的。通过引入setter方法,您可以检查(比如说)长度,空值,内容等。

以上意味着您可以以与界面不同的方式实现该类(想象 - 您可以将这些方法抽象为接口并提供多个以深刻不同的方式操作的多个实现)。因为它们遵循相同的接口,所以可以将一个实现替换为另一个,而不更改周围的代码。

我会说(更进一步说)我倾向于不喜欢上述模式。我的推理是,面向对象的优点是你可以告诉对象以你的名义做事情,而不是,这样你就可以自己提取字段并使用它们执行你自己的逻辑。因为这个原因,我倾向于怀疑领域和领衔者/吸气者之间的关系。

+0

Thx为答案,这一个帮助我最。仍然我不能推荐,因为我的声望仍然很低:( – 2013-03-14 15:21:17

0

因为如果您决定通过项目的一半来改变变量的工作方式,或者如果您想修改原始值,您必须通过代码并进行更改对该公共变量的所有调用。

但是,使用getter和setter,您可以更改在方法内处理变量的方式。

0
  1. private关键字意味着属性或方法声明为使 只是你的类中可见。

  2. public关键字表示声明为的属性或方法对任何人都是可见的。

这种做法是众所周知的封装信息。公共设置者和获取者允许程序员控制这些函数的用户可以对你的私有属性做些什么。