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

在Java中,如何实现封装?

在 Java 中实现封装主要通过 访问修饰符 和 ** getter/setter 方法** 来实现,核心步骤是"隐藏属性、暴露接口"。具体实现方式如下:

一、使用访问修饰符隐藏类的成员

Java 提供了 4 种访问修饰符,用于控制类成员(属性和方法)的访问范围,从而实现隐藏:

修饰符访问范围封装用途
private仅当前类内部可访问完全隐藏核心属性/方法
default同一包内可访问(无修饰符时默认)包内可见,对外隐藏
protected同一包内或子类可访问允许子类访问,对外隐藏
public任何地方可访问暴露公共接口(如 getter/setter)

封装的核心原则
将类的属性(数据)声明为 private(私有),禁止外部直接访问;
将操作属性的方法声明为 public(公开),作为外部交互的接口。

二、通过 getter/setter 方法暴露访问接口

对于私有属性,提供公共的 getXxx() 方法(获取属性值)和 setXxx() 方法(设置属性值),在方法中可以添加校验逻辑,确保数据合法性。

实例:封装一个 Student
public class Student {// 1. 将属性声明为 private(隐藏数据)private String name;  // 姓名private int age;      // 年龄private double score; // 成绩// 2. 提供 public 的 getter 方法(获取属性值)public String getName() {return name;}// 3. 提供 public 的 setter 方法(设置属性值,可添加校验)public void setName(String name) {// 例如:限制姓名不能为 null 或空字符串if (name != null && !name.trim().isEmpty()) {this.name = name;} else {System.out.println("姓名不能为空!");}}public int getAge() {return age;}public void setAge(int age) {// 例如:限制年龄在 0-150 之间if (age >= 0 && age <= 150) {this.age = age;} else {System.out.println("年龄必须在 0-150 之间!");}}public double getScore() {return score;}public void setScore(double score) {// 例如:限制成绩在 0-100 之间if (score >= 0 && score <= 100) {this.score = score;} else {System.out.println("成绩必须在 0-100 之间!");}}// 4. 其他业务方法(也可封装内部逻辑)public void showInfo() {System.out.println("姓名:" + name + ",年龄:" + age + ",成绩:" + score);}
}

三、使用封装后的类

外部只能通过 setXxx() 方法修改属性,通过 getXxx() 方法获取属性,无法直接操作私有属性:

public class TestStudent {public static void main(String[] args) {Student s = new Student();// 错误:无法直接访问 private 属性// s.name = "张三"; // 正确:通过 setter 方法设置属性(会触发校验)s.setName("张三");   // 合法s.setAge(200);      // 触发错误提示:年龄必须在 0-150 之间s.setAge(18);       // 合法s.setScore(95.5);   // 合法// 通过 getter 方法获取属性System.out.println("姓名:" + s.getName()); // 输出:张三// 调用业务方法s.showInfo(); // 输出:姓名:张三,年龄:18,成绩:95.5}
}

四、封装的进阶:隐藏方法实现

除了属性,方法也可以被封装。例如,将类内部的辅助方法声明为 private,只暴露必要的 public 方法给外部使用:

public class Calculator {// 公开方法:对外暴露的接口public int add(int a, int b) {return calculate(a, b, "+");}public int subtract(int a, int b) {return calculate(a, b, "-");}// 私有方法:内部实现细节,对外隐藏private int calculate(int a, int b, String operator) {switch (operator) {case "+": return a + b;case "-": return a - b;default: throw new IllegalArgumentException("不支持的运算符");}}
}

外部只能调用 add()subtract(),无需关心 calculate() 的实现,即使未来修改 calculate() 的逻辑,也不会影响外部调用。

总结

Java 实现封装的核心步骤:

  1. private 修饰属性,禁止外部直接访问;
  2. 提供 publicgetter/setter 方法,控制属性的读写逻辑;
  3. 用访问修饰符隐藏内部方法实现,只暴露必要的公共接口。

通过这种方式,既能保证数据安全,又能降低代码耦合度,使程序更易于维护。

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

相关文章:

  • 【实录】使用 patch-package 修复第三方 npm 包中的 Bug
  • Warm-Flow 1.8.2版本发布|新增功能和优化,体验更稳定
  • 电池组PACK自动化生产线介绍|深圳比斯特自动化
  • 云手机的挂机功能涉及到哪些内容
  • 手机群控软件在游戏运营中的风险管控技术实现
  • js打开网站做欧美市场的网站
  • MongoDB源码delete分析oplog:从删除链路到核心函数实现
  • 运维面试准备——综合篇(一)
  • 线性代数 · 矩阵 | SVD 与 PCA 应用区别
  • 网站漏洞扫描服务个人怎么做公众号
  • 云计算综合标准化体系建设提供系统性指引
  • 阿里云智能集团首席技术官云栖大会要点总结
  • 6. React useState基础使用:useState修改状态的规则;useState修改对象状态的规则
  • 凡科做的网站怎么打不开了天津做再生资源交易的网站
  • AWS Shield 与海外高防服务器的对比分析
  • CTF攻防世界WEB精选基础入门:cookie
  • Vue 中 props 传递数据的坑
  • Descheduler for Kubernetes(K8s 重调度器)
  • Embedding(嵌入):让机器理解世界的通用语言
  • sql练习题单-知识点总结
  • 网站空间域名续费湖南送变电建设公司 网站
  • 国产化PDF处理控件Spire.PDF教程:C#中轻松修改 PDF 文档内容
  • 文件预览(pdf、docx、xlsx)
  • AutoCAD如何将指定窗口导出成PDF?
  • 测试DuckDB电子表格读取插件rusty_sheet 0.2版
  • 用「心率」重塑极限,以「中国精度」见证热爱——宜准产品体验官于淼成功挑战北京七环
  • 18003.TwinCat3配置LAN9253从站XML文件(Ethercat)- 示例(一)
  • 解锁特征工程:机器学习的秘密武器
  • 南昌企业网站开发公司hao123网址导航
  • 中山市有什么网站推广长臂挖机出租东莞网站建设