企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## [接口和实现](https://lingcoder.gitee.io/onjava8/#/book/07-Implementation-Hiding?id=%e6%8e%a5%e5%8f%a3%e5%92%8c%e5%ae%9e%e7%8e%b0) 访问控制通常被称为*隐藏实现*(implementation hiding)。将数据和方法包装进类中并把具体实现隐藏被称作是*封装*(encapsulation)。其结果就是一个同时带有特征和行为的数据类型。 出于两个重要的原因,访问控制在数据类型内部划定了边界。第一个原因是确立客户端程序员可以使用和不能使用的边界。可以在结构中建立自己的内部机制而不必担心客户端程序员偶尔将内部实现作为他们可以使用的接口的一部分。 这直接引出了第二个原因:将接口与实现分离。如果在一组程序中使用接口,而客户端程序员只能向**public**接口发送消息的话,那么就可以自由地修改任何不是**public**的事物(例如包访问权限,protected,或 private 修饰的事物),却不会破坏客户端代码。 为了清晰起见,你可以采用一种创建类的风格:**public**成员放在类的开头,接着是**protected**成员,包访问权限成员,最后是**private**成员。这么做的好处是类的使用者可以从头读起,首先会看到对他们而言最重要的部分(public 成员,因为可以从文件外访问它们),直到遇到非**public**成员时停止阅读,下面就是内部实现了: ~~~ // hiding/OrganizedByAccess.java public class OrganizedByAccess { public void pub1() {/* ... */} public void pub2() {/* ... */} public void pub3() {/* ... */} private void priv1() {/* ... */} private void priv2() {/* ... */} private void priv3() {/* ... */} private int i; // ... } ~~~ 这么做只能是程序阅读起来稍微容易一些,因为实现和接口还是混合在一起。也就是说,你仍然能看到源代码——实现部分,因为它就在类中。另外,javadoc 提供的注释文档功能降低了程序代码的可读性对客户端程序员的重要性。将接口展现给类的使用者实际上是类浏览器的任务,类浏览器会展示所有可用的类,并告诉你如何使用它们(比如说哪些成员可用)。在 Java 中,JDK 文档起到了类浏览器的作用。