Java封装通过private修饰属性隐藏实现细节,提供public getter/setter方法控制访问并支持校验、日志等逻辑,确保内部实现可替换而不影响外部调用,必要时可用package-private或protected实现细粒度访问控制。

Java 封装通过访问控制(主要是 private 修饰符)限制外部对类成员的直接访问,再提供受控的公共接口(如 getter/setter 方法)来读写数据,从而隐藏内部实现细节。
用 private 修饰属性,切断外部直接访问
把字段声明为 private,是封装的第一步。这样其他类无法直接读取或修改该字段,哪怕在同一个包内也不行。
- 例如:private String password; —— 外部类不能写
user.password = "123" - 即使子类也无法继承该字段,彻底隔绝直接操作路径
提供 public 的 getter 和 setter 方法,控制访问逻辑
通过方法暴露有限能力,同时可在其中加入校验、转换、日志等逻辑,这些都属于“内部实现”,调用方无需知道也不应依赖。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 比如 setAge(int age) 可检查年龄是否合法:
if (age 150) throw new IllegalArgumentException(); -
getBalance() 可返回计算后的净额,而不是直接返回原始
private double rawBalance; - 方法名本身也抽象了实现——
getUserInfo()可能拼接字符串、查缓存、甚至远程调用,但调用方只看到结果
内部实现可随时替换,不影响外部代码
只要公共方法签名不变,类内部怎么存、怎么算,完全自由。这是封装带来的核心好处:解耦。
立即学习“Java免费学习笔记(深入)”;
- 原来用
private List<string> tags = new ArrayList();</string>,后来换成private Set<string> tags = new HashSet();</string>?只要 addTag()、getTags() 行为一致,调用方完全无感 - 密码字段从明文
private String password;改为加密后存储private byte[] encryptedPwd;?只要 setPassowrd() 和 checkPassword() 功能不变,上层不用改一行
必要时使用 package-private 或 protected 控制更细粒度的可见性
不是所有情况都要死守 private + public 组合。合理利用默认(包级)和 protected,能在模块或继承体系内保留协作空间,同时仍对外隐藏。
- 工具类中一个解析逻辑方法,仅希望同包内其他类复用,就用默认访问权限(不加修饰符)
- 父类希望子类能扩展某个计算步骤,可将该方法设为 protected,既开放给继承链,又不对外界公开

















