🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## [封装](https://lingcoder.gitee.io/onjava8/#/book/01-What-is-an-Object?id=%e5%b0%81%e8%a3%85)  我们可以把编程的侧重领域划分为研发和应用。应用程序员调用研发程序员构建的基础工具类来做快速开发。研发程序员开发一个工具类,该工具类仅向应用程序员公开必要的内容,并隐藏内部实现的细节。这样可以有效地避免该工具类被错误的使用和更改,从而减少程序出错的可能。彼此职责划分清晰,相互协作。当应用程序员调用研发程序员开发的工具类时,双方建立了关系。应用程序员通过使用现成的工具类组装应用程序或者构建更大的工具库。如果工具类的创建者将类的内部所有信息都公开给调用者,那么有些使用规则就不容易被遵守。因为前者无法保证后者是否会按照正确的规则来使用,甚至是改变该工具类。只有设定访问控制,才能从根本上阻止这种情况的发生。  因此,使用访问控制的原因有以下两点:  1. 让应用程序员不要触摸他们不应该触摸的部分。(请注意,这也是一个哲学决策。部分编程语言认为如果程序员有需要,则应该让他们访问细节部分。); 2. 使类库的创建者(研发程序员)在不影响后者使用的情况下完善更新工具库。例如,我们开发了一个功能简单的工具类,后来发现可以通过优化代码来提高执行速度。假如工具类的接口和实现部分明确分开并受到保护,那我们就可以轻松地完成改造。  Java 有三个显式关键字来设置类中的访问权限:`public`(公开),`private`(私有)和`protected`(受保护)。这些访问修饰符决定了谁能使用它们修饰的方法、变量或类。  1. `public`(公开)表示任何人都可以访问和使用该元素; 2. `private`(私有)除了类本身和类内部的方法,外界无法直接访问该元素。`private`是类和调用者之间的屏障。任何试图访问私有成员的行为都会报编译时错误; 3. `protected`(受保护)类似于`private`,区别是子类(下一节就会引入继承的概念)可以访问`protected`的成员,但不能访问`private`成员; 4. `default`(默认)如果你不使用前面的三者,默认就是`default`访问权限。`default`被称为包访问,因为该权限下的资源可以被同一包(库组件)中其他类的成员访问。