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

    • 在最高级别——public,或package-private(无显式修饰符)。
    • 在成员级别——publicprivateprotected,或package-private(没有明确的修饰符)。

    可以使用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平台中的类)时,访问级别确定您的类可以使用这些类的哪些成员。其次,编写类时,需要确定类中每个成员变量和每个方法应具有的访问级别。
    让我们看一下类的集合,看看访问级别如何影响可见性。 下图显示了示例中的四个类以及它们之间的关系。
    控制对类成员的访问 - 图1
    用于说明访问级别的示例的类和包
    下表显示了可以应用于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字段。(本教程中的许多示例都使用public字段。这可能有助于简要说明一些要点,但不建议在生产代码中使用。)公共字段倾向于将您链接到特定的实现,并限制了更改代码的灵活性。