私有变量比公共变量更安全的真实程度是多少?

cho*_*on4 0 java encapsulation abstraction

Stackoverflow 充斥着关于私有变量的文章.他们中的大多数人都说使用私有变量"更安全".虽然,我从来没有找到一个真正具体和可满足的私有变量实际上使任何更安全的情况,除了可能是用户不能意外地从类外修改私有变量的事实.

那么私有变量比公共变量更安全的真实程度是多少?将变量私有化只是保护代码免受未来的影响,以及同一个项目中的开发人员吗?它是否意味着保护它免受其他使用您的软件作为API的开发人员的影响?私有变量提供的安全网是否会扩展到防止黑客和恶意用户更改代码中非常重要和敏感​​的部分?

小智 6

封装是关于松散耦合:

封装的好处不是隐藏值,或者实际上是为了防止直接访问它们.

好处是隐藏实现,以便它不会与公共接口紧密耦合.

这样可以安全地更改实现,因为没有客户端依赖于实现细节或副作用.

如果您公开您正在使用ArrayList存储项目,则客户端代码将与ArrayList实现相关联.您无法安全地将其更改为a,TreeSet因为实现是公共接口的一部分.如果是公共接口,Collection那么您可以更改实现,因为您只承诺提供Collection语义.

同样的事情等为及时存储说一个例子long:如果你想将其更改为一个java.util.DateCalendarJodaTime something则你不能,因为每个客户的期待long如果实现public.