文档

Java™ 教程-Java Tutorials 中文版
控制对类成员的访问
Trail: Learning the Java Language
Lesson: Classes and Objects
Section: More on Classes

控制对类成员的访问

访问级别修饰符确定其他类是否可以使用特定字段或调用特定方法。有两个级别的访问控制:

一个类可以使用修饰符 public 来声明,在这种情况下,该类对任何地方的所有类都是可见的。如果一个类没有修饰符(默认,也称为 package-private),它只在它自己的包中可见(包是相关类的命名组,你将在以后的课程中学习)。

在成员级别,你也可以像使用顶级类一样使用 public 修饰符或无修饰符(package-private),其含义相同。对于成员,还有两个额外的访问修饰符:privateprotectedprivate 修饰符指定该成员只能在其自己的类中访问。protected 修饰符指定成员只能在其自己的包中访问(与 package-private 一样),另外,还可以在另一个包中由其类的子类访问。

下表显示了每个修饰符允许的成员访问权限。

访问级别
Modifier Class Package Subclass World
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N

第一个数据列表示类本身是否有权访问成员,由访问级别定义。正如你所看到的,一个类总是可以访问自己的成员。第二列表出与该类相同的包中的类(不管他们父子关系)是否有权访问该类成员。第三列表示在此包外部声明的类的子类是否有权访问该类成员。第四列表示是否所有的类都有权访问该类成员。

访问级别以两种方式影响你。首先,当你使用来自其他来源的类(例如 Java 平台中的类)时,访问级别将确定你自己的类可以使用哪些类的成员。其次,当你编写一个类时,你需要决定每个成员变量和类中每个方法应具有的访问级别。

我们来看看一组类,并了解访问级别如何影响可视性。下图 显示了本例中的四个类以及它们之间的关系。

用于说明访问级别的示例的类和包

用于说明访问级别的示例的类和包

下表 显示了可以应用于每个访问修饰符的 Alpha 类成员的可见位置。

可见性
Modifier Alpha Beta Alphasub Gamma
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N

关于选择访问级别的提示: 

如果其他程序员使用你的类,你希望确保不会发生误用错误。访问级别可以帮助你做到这一点。

  • 使用对特定成员有意义的限制性最强的访问级别。除非你有充分的理由不使用,否则使用 private
  • 除了常量外,避免 public 字段。(本教程中的许多示例使用公共字段。这可能有助于简洁地说明一些观点,但不建议用于生产代码。)公共字段倾向于将你链接到特定的实现,并限制你更改代码的灵活性。


Previous page: Using the this Keyword
Next page: Understanding Class Members