public允许任意代码访问,private仅限本类内部访问;前者可被跨包、子类等调用,后者连子类也无法访问;封装通过private字段+public getter/setter实现校验控制;编译期强制报错保障边界安全;勿滥用public破坏封装。

public 允许类内外任意代码访问该成员,private 仅允许本类内部访问,是实现封装的核心控制手段。
作用范围不同
public 成员可被同一包内其他类、不同包的子类、以及任意外部类直接调用;private 成员只能在声明它的那个类内部使用,连子类和同包类都无法访问。
封装目的体现明显
把字段设为 private,再提供 public 的 getter/setter 方法,才能在读写时加入校验、日志或计算逻辑。比如设置年龄字段时,private 可防止外部直接赋值 -5 或 200,而通过 public setAge(int a) 方法就能判断是否合法。
编译期强制限制
对 private 成员的非法访问会在编译阶段报错,不是运行时异常。IDE 通常会立刻标红并提示“cannot resolve symbol”。这种静态检查保障了封装边界不被无意破坏。
常见误用提醒
- 不要为了省事把所有字段都设成 public —— 这等于放弃封装,后续修改字段逻辑时会牵一发而动全身
- 工具类中的 static 方法一般用 public,但其内部辅助方法若只被自己调用,应设为 private
- 构造方法可以是 private(如单例模式),此时外部无法 new 实例,只能通过指定入口获取对象

















