控制对class成员的访问

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

  • 在最高级别public或 package-private(无显式修饰符)。

  • 在成员级别publicprivateprotected或 package-private(无显式修饰符)。

可以使用修饰符public声明一个类,在这种情况下,该类对于所有地方的所有类都是可见的。如果一个类没有修饰符(默认值,也称为 package-private),则它仅在其自己的包中可见(包被命名为相关类的组,您将在以后的类中对其进行了解.)

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

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

Access Levels

ModifierClassPackageSubclassWorld
publicYYYY
protectedYYYN
no modifierYYNN
privateYNNN

第一个数据列指示类本身是否有权访问由访问级别定义的成员。如您所见,类始终有权访问其自己的成员。第二列指示与该类在同一个包中的类(无论其亲本)是否有权访问该成员。第三列指示在此包外部声明的类的子类是否有权访问该成员。第四列指示是否所有类都可以访问该成员。

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

让我们看一下类的集合,看看访问级别如何影响可见性。下图显示了此示例中的四个类以及它们之间的关系。

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

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

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

Visibility

ModifierAlphaBetaAlphasubGamma
publicYYYY
protectedYYYN
no modifierYYNN
privateYNNN

Tips on Choosing an Access Level:

如果其他程序员使用您的类,则要确保不会发生由于滥用而引起的错误。访问级别可以帮助您做到这一点。

  • 使用对特定成员有意义的最严格的访问级别。除非有充分的理由,否则请使用private

  • 避免使用public字段(常量除外)。 (本教程中的许多示例都使用公共字段.这可能有助于简要说明一些要点,但不建议在生产代码中使用.)公共字段倾向于将您链接到特定的实现,并限制了更改代码的灵 Active。