private关键字意味着除非那个特定的类而且从那个类的方法里否则没有人能访问那个成员同一个包内的其他成员不能访问private成员这使其显得似乎将类与我们自己都隔离起来另一方面也不能由几个合作的人创建一个包所以private允许我们自由地改变那个成员同时毋需关心它是否会影响同一个包内的另一个类默认的友好包访问通常已经是一种适当的隐藏方法请记住对于包的用户来说是不能访问一个友好成员的这种效果往往能令人满意因为默认访问是我们通常采用的方法对于希望变成public(公共)的成员我们通常明确地指出令其可由客户程序员自由调用而且作为一个结果最开始的时候通常会认为自己不必频繁使用private关键字因为完全可以在不用它的前提下发布自己的代码(这与C++是个鲜明的对比)然而随着学习的深入大家就会发现private仍然有非常重要的用途特别是在涉及多线程处理的时候(详情见第章) 下面是应用了private的一个例子 //: IceCreamjava // 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 = SundaemakeASundae(); } } ///:~ 这个例子向我们证明了使用private的方便有时可能想控制对象的创建方式并防止有人直接访问一个特定的构建器(或者所有构建器)在上面的例子中我们不可通过它的构建器创建一个Sundae对象相反必须调用makeASundae()方法来实现(注释③) ③此时还会产生另一个影响由于默认构建器是唯一获得定义的而且它的属性是private所以可防止对这个类的继承(这是第章要重点讲述的主题) 若确定一个类只有一个助手方法那么对于任何方法来说都可以把它们设为private从而保证自己不会误在包内其他地方使用它防止自己更改或删除方法将一个方法的属性设为private后可保证自己一直保持这一选项(然而若一个句柄被设为private并不表明其他对象不能拥有指向同一个对象的public句柄有关别名的问题将在第章详述) |