控制对class成员的访问
访问级别修饰符确定其他类是否可以使用特定字段或调用特定方法。访问控制分为两个级别:
-
在最高级别
public
或 package-private(无显式修饰符)。 -
在成员级别
public
,private
,protected
或 package-private(无显式修饰符)。
可以使用修饰符public
声明一个类,在这种情况下,该类对于所有地方的所有类都是可见的。如果一个类没有修饰符(默认值,也称为 package-private),则它仅在其自己的包中可见(包被命名为相关类的组,您将在以后的类中对其进行了解.)
在成员级别,您也可以像顶级类一样使用public
修饰符或不使用修饰符(package-private)(具有相同含义)。对于成员,还有两个附加的访问修饰符:private
和protected
。 private
修饰符指定只能在其自己的类中访问该成员。 protected
修饰符指定成员只能在其自己的包中访问(与 package-private 一样),并且只能由其类在另一个包中的子类访问。
下表显示了对每个修饰符允许的成员的访问。
Access Levels
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 类成员的可见位置。
Visibility
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 |
Tips on Choosing an Access Level:
如果其他程序员使用您的类,则要确保不会发生由于滥用而引起的错误。访问级别可以帮助您做到这一点。
-
使用对特定成员有意义的最严格的访问级别。除非有充分的理由,否则请使用
private
。 -
避免使用
public
字段(常量除外)。 (本教程中的许多示例都使用公共字段.这可能有助于简要说明一些要点,但不建议在生产代码中使用.)公共字段倾向于将您链接到特定的实现,并限制了更改代码的灵 Active。