访问权限的控制常被视作是“具体实现的隐藏(implementation hiding)”。把数据和方
法包装进类中,与具体实现的隐藏结合到一起,常被称作是“封装(encapsulation)” 。
其结果是一个同时带有特征和行为的数据类型。
出于两个很重要的原因,访问权限控制将权限的边界划在了数据类型的内部。第一个原因是
要设定客户端程序员可以使用和不可以使用的界限。你可以在结构中建立自己的内部机制,
而不必担心客户端程序员会偶然地将内部机制当作是他们可以使用的接口的一部分。
这个原因直接引出了第二个原因,即将接口和具体实现进行分离。如果结构是用于一组程序
之中,而客户端程序员除了可以向接口发送信息之外什么也不可以做的话,那么你就可以随
意更改所有不是 public 的东西(例如包访问权限,protected 和 private),而不会
破坏客户端代码。
我们现在正处于一个面向对象的编程世界中。在这里 class 事实上被描绘成是“对象的集
群”,就象你描述一群鱼或是一群鸟一样。隶属于这个类的所有对象将都具有这些特征和行
为。类是对所有同类型对象的外观和行为进行描述的方式。
javadoc所提供的“寓文档于注解之中”
总结
Java的访问权限修饰符对类的创建者给予极具价值的控制力量。类的用户可以清晰地看到到底什么是他们可以用的,什么又是他们可以会忽略的。但是,确保所有用户都具有能够独
立于某个类的底层实现细节的能力才是更为重要的。作为该类的创建者,如果你了解了这一
点,你就可以按照自己的意愿改变底层实施细节,因为你知道客户端程序员不会因为这些改
变而受到影响,他们也不可能访问到该类的那一部分。
当你具备了改变底层实施细节的能力时,你就可以随意地将你的设计升级,同时你也就具有
了犯错的可能性。无论你是如何细心地计划并设计,你都有可能犯错。当你了解到你所犯错
误是相对安全的时候,你就可以更加放心地进行实验,也就可以更快地学会,更快地完成你
的项目。
类的 public接口是用户真正能够看到的,所以这一部分是在分析和设计的过程中决定该类
是否正确的最重要的部分。尽管如此,你仍然有进行改变的空间。如果你在最初无法创建出
正确的接口,那么只要你不删除任何客户端程序员在他们的程序中已经用到的东西,你就可
以添加更多的方法。