• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
思想人生从关注生活开始
博客园    首页    新随笔    联系   管理    订阅  订阅

Java 中的访问修饰符-Java快速入门教程

1. 概述

在本教程中,我们将介绍 Java 中的访问修饰符,这些修饰符用于设置类、变量、方法和构造函数的访问级别。

简单地说,有四个访问修饰符:public, private, protected and default(无关键字)。

在我们开始之前,让我们注意顶级类只能使用public或default访问修饰符。在成员级别,我们可以使用所有四个。

2. default

当我们没有显式使用任何关键字时,Java 将设置对给定类、方法或属性的默认访问类型。默认访问修饰符也称为 package-private,这意味着所有成员都在同一包中可见,但不能从其他包访问:

package com.jack.yang.accessmodifiers;

public class SuperPublic {
    static void defaultMethod() {
        ...
    }
}

defaultMethod() 可以在同一包的另一个类中访问:

package com.jack.yang.accessmodifiers;

public class Public {
    public Public() {
        SuperPublic.defaultMethod(); // Available in the same package.
    }
}
但是,它在其他软件包中不可用。

3. public 

如果我们将 public 关键字添加到类、方法或属性中,那么我们就让它可供所有人使用,即所有包中的所有其他类都可以使用它。这是限制最少的访问修饰符:

package com.jack.yang.accessmodifiers;

public class SuperPublic {
    public static void publicMethod() {
        ...
    }
}
publicMethod() 在另一个包中可用:
package com.jack.yang.accessmodifiers.another;

import com.baeldung.accessmodifiers.SuperPublic;

public class AnotherPublic {
    public AnotherPublic() {
        SuperPublic.publicMethod(); // Available everywhere. Let's note different package.
    }
}

有关 public 关键字在应用于类、接口、嵌套公共类或接口和方法时的行为方式的更多详细信息,请参阅专用文章。

4. private 

任何带有 private 关键字的方法、属性或构造函数只能从同一类访问。这是限制性最强的访问修饰符,也是封装概念的核心。所有数据都将对外界隐藏:

 
package com.jack.yan.accessmodifiers;

public class SuperPublic {
    static private void privateMethod() {
        ...
    }
    
     private void anotherPrivateMethod() {
         privateMethod(); // available in the same class only.
    }
}

这篇更详细的文章将展示 private 关键字在应用于字段、构造函数、方法和内部类时的行为方式。

5. 受保护

在公共和专用访问级别之间,有受保护的访问修饰符。

如果我们使用 protected 关键字声明一个方法、属性或构造函数,我们可以从同一个包(与包私有访问级别一样)以及从其类的所有子类访问成员,即使它们位于其他包中:

package com.jack.yang.accessmodifiers;

public class SuperPublic {
    static protected void protectedMethod() {
        ...
    }
}

protectedMethod() 在子类中可用(无论包如何):

package com.jack.yang.accessmodifiers.another;

import com.jack.yang.accessmodifiers.SuperPublic;

public class AnotherSubClass extends SuperPublic {
    public AnotherSubClass() {
        SuperPublic.protectedMethod(); // Available in subclass. Let's note different package.
    }
}

专用文章详细介绍了在字段、方法、构造函数、内部类以及同一包或不同包中的可访问性中使用的关键字。

6. 比较

下表总结了可用的访问修饰符。我们可以看到,一个类,无论使用什么访问修饰符,总是可以访问它的成员:

修饰语

类同包继承所有包
public
Y Y Y Y
protected
Y Y Y N
default
Y Y N N
private
Y N N N

7. 结论

在这篇简短的文章中,我们介绍了 Java 中的访问修饰符。

最好对任何给定成员使用最严格的访问级别,以防止滥用。我们应该始终使用私有访问修饰符,除非有充分的理由不这样做。

仅当成员是 API 的一部分时,才应使用公共访问级别。

posted @ 2023-03-28 16:44  JackYang  阅读(365)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3