当前位置: 首页 > news >正文

JAVA中的权限修饰符

在 Java 中,权限修饰符(Access Modifiers) 用于设置类(Class)、变量(Variable)、方法(Method)和构造器(Constructor)的访问级别,它们是 Java 封装(Encapsulation)机制的重要组成部分,用于控制哪些代码可以访问这些程序元素。

1.四种权限修饰符

Java 提供了四种不同的访问级别,它们的限制范围是逐级递增的:

权限修饰符关键字同一类(Same Class)同一包(Same Package)子类(Subclass, 不同包)任意位置(Anywhere)
私有private可见不可见不可见不可见
默认(无关键字)可见可见不可见不可见
受保护protected可见可见可见不可见
公共public可见可见可见可见

2.private(私有)

private 是限制最严格的修饰符。

  • 作用: 只能在定义该成员的类内部访问。

  • 用途: 主要用于封装类的内部状态和实现细节。例如,类的成员变量通常设为 private,然后通过公共(public)的 getter/setter 方法供外部间接访问,隐藏类的内部实现,实现数据保护。

  • 注意: 类(Class)本身不能用 private 修饰。

public class User {private String name; // 外部无法直接访问public String getName() {return name;}public void setName(String name) {this.name = name;}
}

3. 默认(无修饰符)

当没有指定任何权限修饰符时,Java 会自动应用默认权限。

  • 作用: 只能在同一个包(Package)内访问,即使是当前包的子包也无法访问。

  • 用途: 用于实现包级别的封装。如果一个类或成员只需要在同一个项目模块(同一个包)内被其他类访问,不希望外部访问,就可以使用默认权限。

  • 注意: 默认权限常用于将一组紧密关联的类组织在一起。

// 在 com.app.data 包中
class DataProcessor { // 默认权限:只能在 com.app.data 包内访问void process() { // 默认权限方法// ...}
}

关键区别(与子包的关系)
虽然包名看起来有父子关系(例如 com.app.datacom.app.data.utils),但在 Java 权限机制中,它们被视为完全独立的包。

4.protected(受保护)

protected 权限比默认权限更开放,它允许子类跨包访问父类的成员

  • 作用: 可以在同一个包内访问;也可以在不同包中的子类中访问。

  • 用途: 通常用于设计父类,允许子类扩展或使用父类的核心功能,但不希望完全暴露给不相关的外部代码。

  • 访问限制

    • 子类访问: 子类即使在不同的包中,也可以直接访问父类 protected 成员。

    • 非子类访问: 在不同包中的非子类无法访问 protected 成员。

// 父类在 com.base 包中
public class Parent {protected int value = 10; // 可以被子类和同一个包中的类访问
}// 子类在 com.client 包中
public class Child extends Parent {public void display() {// 允许:子类可以直接访问父类的 protected 成员System.out.println(value); }
}

5.public(公共)

public 是限制最少的修饰符。

  • 作用: 可以被任何位置的代码访问。

  • 用途: 用于暴露程序的公共接口和功能,例如主类、公共工具方法、外部 API 接口等。

public class PublicService { // 整个项目可访问public void executeTask() { // 整个项目可调用// ...}
}
  • 注意: 如果一个 Java 源文件(.java 文件)中包含一个 public 顶级类,那么该源文件的文件名必须与这个 public 类名完全一致(包括大小写)。

    示例:

    源文件名顶级类声明结果
    User.javapublic class User {}正确。文件名与 public 类名一致。
    User.javapublic class Person {}编译错误。文件名必须是 Person.java
    Data.javaclass Data {}正确。类是默认权限,文件名可以自由命名,但通常也建议保持一致。

6.权限修饰符的设计思路

优先使用最小可见性原则(least privilege)

  • 能用 private 就不用 public。

  • 逐步放大权限,只暴露必要接口。

常见设计模式:

  • 属性 → private

  • 内部辅助类 → 默认

  • 父类扩展接口 → protected

  • 公共 API → public

http://www.dtcms.com/a/418816.html

相关文章:

  • 前端面试十四之webpack和vite有什么区别
  • 小米路由器 做网站银川森林半岛
  • Kafka04-知识速记
  • 【Linux】高级I/O
  • 开源的容器化平台:Docker高级应用与实战案例
  • 3.7 广域网 (答案见原书 P116)
  • 临淄网站制作首选公司seo排名需要多少钱
  • k8s-部署单master节点
  • Python 2025:量子计算编程的新前沿
  • 二级学院网站建设自评报告互联网营销公司有哪些
  • 做网站滨州现在写博客还是做网站
  • 基于 Service Worker 的图书馆资源缓存技术研究
  • php网站后台验证码不显示哈尔滨教育云平台网站建设
  • 银行门户网站是什么意思网页设计代码中字体的颜色如何改
  • 【代码的暴力美学】-- C语言基础编程题_1
  • Java 架构师系列:JVM 与 AI 负载的优化策略
  • 数据分析-Excel-常用函数
  • Python 文件操作
  • Java 大视界 -- Java 大数据机器学习模型在电商产品销量预测与库存优化管理中的应用
  • 陕西开龄建设网站浙江省建设厅网站如何查安全员
  • 使用 Jenkins 的流水线项目实施 CI/CD
  • 网站建设平台安全问题有哪些方面做网站自动赚钱吗
  • (八)掌握继承的艺术:重构之路,化繁为简
  • 文成做网站国外网站如何做推广
  • 云栖2025 | 阿里云AI搜索年度发布:开启Agent时代,重构搜索新范式
  • 让每次语音唤醒都可靠,公牛沐光重构可观测体系
  • 黄峥的成功之道:重构电商版图的创新密码
  • 数字大健康崛起:艾灸机器人重构就业生态,传统与科技如何共生?
  • 得物笔试题
  • Xenium空间转录组实战 | Xenium Explorer 多样本拼片拆分 ROI 区域圈选