返回介绍

5.2.3 private:不能接触!

发布于 2024-10-15 23:56:15 字数 1250 浏览 0 评论 0 收藏 0

private 关键字意味着除非那个特定的类,而且从那个类的方法里,否则没有人能访问那个成员。同一个包内的其他成员不能访问 private 成员,这使其显得似乎将类与我们自己都隔离起来。另一方面,也不能由几个合作的人创建一个包。所以 private 允许我们自由地改变那个成员,同时毋需关心它是否会影响同一个包内的另一个类。默认的“友好”包访问通常已经是一种适当的隐藏方法;请记住,对于包的用户来说,是不能访问一个“友好”成员的。这种效果往往能令人满意,因为默认访问是我们通常采用的方法。对于希望变成 public(公共)的成员,我们通常明确地指出,令其可由客户程序员自由调用。而且作为一个结果,最开始的时候通常会认为自己不必频繁使用 private 关键字,因为完全可以在不用它的前提下发布自己的代码(这与 C++是个鲜明的对比)。然而,随着学习的深入,大家就会发现 private 仍然有非常重要的用途,特别是在涉及多线程处理的时候(详情见第 14 章)。

下面是应用了 private 的一个例子:

//: 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,所以可防止对这个类的继承(这是第 6 章要重点讲述的主题)。

若确定一个类只有一个“助手”方法,那么对于任何方法来说,都可以把它们设为 private,从而保证自己不会误在包内其他地方使用它,防止自己更改或删除方法。将一个方法的属性设为 private 后,可保证自己一直保持这一选项(然而,若一个句柄被设为 private,并不表明其他对象不能拥有指向同一个对象的 public 句柄。有关“别名”的问题将在第 12 章详述)。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文