此Java教程是为JDK 8编写的。本页中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java语言变更了解Java SE 9及后续版本中更新的语言特性摘要。
请参阅JDK发行说明以获取有关所有JDK发行版的新功能、增强功能和已删除或弃用选项的信息。
访问级别修饰符决定其他类是否可以使用特定的字段或调用特定的方法。有两个级别的访问控制:
public
或包私有(没有显式修饰符)。public
,private
,protected
或包私有(没有显式修饰符)。一个类可以用修饰符public
声明,这样该类就对所有类都可见。如果一个类没有修饰符(默认情况下,也称为包私有),它只在自己的包内可见(包是一组相关类的命名组 - 您将在后面的课程中了解到它们)。
在成员级别,您还可以像顶级类一样使用public
修饰符或没有修饰符(包私有),并且具有相同的含义。对于成员,还有两个额外的访问修饰符:private
和protected
。 private
修饰符指定该成员只能在其自己的类中访问。 protected
修饰符指定该成员只能在其自己的包内(与包私有相同)访问,并且可以由另一个包中的其类的子类访问。
下表显示了每个修饰符允许的成员访问权限。
修饰符 | 类 | 包 | 子类 | 全局 |
---|---|---|---|---|
public |
是 | 是 | 是 | 是 |
protected |
是 | 是 | 是 | 否 |
无修饰符 | 是 | 是 | 否 | 否 |
private |
是 | 否 | 否 | 否 |
第一列数据指示类本身是否具有对访问级别定义的成员的访问权限。如您所见,类总是可以访问其自己的成员。第二列指示与类相同包中的类(无论其父级如何)是否可以访问成员。第三列指示在该包之外声明的类的子类是否可以访问成员。第四列指示所有类是否可以访问成员。
访问级别以两种方式影响您。首先,当您使用来自其他源(例如Java平台中的类)的类时,访问级别确定您自己的类可以使用这些类的哪些成员。其次,当您编写一个类时,您需要决定类中每个成员变量和每个方法的访问级别。
让我们看一下一组类,并了解访问级别如何影响可见性。下图显示了此示例中的四个类及其之间的关系。
用于说明访问级别的示例的类和包
下表显示了应用于Alpha类的每个访问修饰符的成员的可见性。
修饰符 | Alpha | Beta | Alphasub | Gamma |
---|---|---|---|---|
public |
是 | 是 | 是 | 是 |
protected |
是 | 是 | 是 | 否 |
无修饰符 | 是 | 是 | 否 | 否 |
private |
是 | 否 | 否 | 否 |
如果其他程序员使用您的类,您希望确保不会发生错误的错误。访问级别可以帮助您做到这一点。
private
。public
字段。(教程中的许多示例使用public字段。这可能有助于简明地说明一些要点,但不推荐用于生产代码。)公共字段倾向于将您与特定实现关联起来,并限制您更改代码的灵活性。