💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
### [private: 你无法访问](https://lingcoder.gitee.io/onjava8/#/book/07-Implementation-Hiding?id=private-%e4%bd%a0%e6%97%a0%e6%b3%95%e8%ae%bf%e9%97%ae) 关键字**private**意味着除了包含该成员的类,其他任何类都无法访问这个成员。同一包中的其他类无法访问**private**成员,因此这等于说是自己隔离自己。另一方面,让许多人合作创建一个包也是有可能的。使用**private**,你可以自由地修改那个被修饰的成员,无需担心会影响同一包下的其他类。 默认的包访问权限通常提供了足够的隐藏措施;记住,使用类的客户端程序员无法访问包访问权限成员。这样做很好,因为默认访问权限是一种我们常用的权限(同时也是一种在忘记添加任何访问权限时自动得到的权限)。因此,通常考虑的是把哪些成员声明成**public**供客户端程序员使用。所以,最初不常使用关键字**private**,因为程序没有它也可以照常工作。然而,使用**private**是非常重要的,尤其是在多线程环境中。(在"并发编程"一章中将看到)。 以下是一个使用**private**的例子: ~~~ // hiding/IceCream.java // Demonstrates "private" keyword class Sundae { private Sundae() {} static Sundae makeASundae() { return new Sundae(); } } public class IceCream { public static void main(String[] args) { //- Sundae x = new Sundae(); Sundae x = Sundae.makeASundae(); } } ~~~ 以上展示了**private**的用武之地:控制如何创建对象,防止别人直接访问某个特定的构造器(或全部构造器)。例子中,你无法通过构造器创建一个**Sundae**对象,而必须调用`makeASundae()`方法创建对象。 任何可以肯定只是该类的"助手"方法,都可以声明为**private**,以确保不会在包中的其他地方误用它,也防止了你会去改变或删除它。将方法声明为**private**确保了你拥有这种选择权。 对于类中的**private**属性也是一样。除非必须公开底层实现(这种情况很少见),否则就将属性声明为**private**。然而,不能因为类中某个对象的引用是**private**,就认为其他对象也无法拥有该对象的**public**引用(参见附录:对象传递和返回)。