请考虑以下Java代码:
public class SomeClass{
private int data;
public void setData(int data){
this.data = data;
}
public int getData(){
return this.data;
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,可以从任何地方访问数据的值.那么为什么不公开现场数据呢?
为什么吸毒者和塞特犬?
很多人想知道为什么我们需要Java中的访问器和mutator方法(又名getter和setter),为什么我们不能直接访问数据呢?但这里封装的目的不是隐藏数据本身,而是隐藏有关如何操作这些数据的实现细节.因此,我们想要的是一种提供公共接口的方法,通过该接口我们可以访问这些数据.我们以后可以在不影响类的公共接口的情况下更改数据的内部表示.相反,通过暴露数据本身,我们会破坏封装,因此,在不影响其用户的情况下,改变将来操纵此数据的方式的能力.我们将使用数据本身创建依赖项,而不是使用类的公共接口.当"改变"终于找到我们时,我们将创造一个完美的鸡尾酒.
我们可能希望封装对字段的访问有几个令人信服的理由.我发现的这些原因的最佳纲要在Joshua Bloch的书" Effective Java"中有所描述.在第14项:最小化类和成员的可访问性,他提到了几个原因,我在这里提到:
但是,了解封装不仅仅是隐藏字段非常重要.在Java中,我们可以隐藏整个类,这样就隐藏了整个API的实现细节.
通过阅读Alan Snyder撰写的一篇名为" 面向对象编程语言中的封装和继承 "的精彩文章,我向所有读者推荐,这使我对这一重要概念的理解得到了拓展和丰富.