java成员变量应优先声明为private以实现封装,通过带校验逻辑的getter/setter控制访问,子类字段隐藏父类同名字段需用super显式访问,类级数据宜用private static配合静态方法管理。

Java 中成员变量的访问控制和封装隐藏不是语法装饰,而是设计契约。核心就一条:不让外部代码绕过逻辑直接改数据。
用 private 封住字段,是封装的第一道门
所有业务相关的成员变量,优先声明为 private。这不是“怕别人看”,而是切断随意赋值的路径——哪怕只是简单设个值,也要经过方法入口,才能预留校验、日志、联动更新等扩展空间。
- 子类也不能直接访问父类的 private 字段,必须通过 public/protected 方法间接操作
- 默认(不写修饰符)、protected、public 都会扩大可见范围,容易导致意外耦合,慎用
- boolean 类型字段的 getter 建议用 isXxx() 而非 getXxx(),符合 Java Bean 规范
getter/setter 不是模板套话,要带逻辑才真正有用
生成 getter/setter 只是起点。真正起作用的是在 setter 里加入约束,在 getter 里做脱敏或计算。
- 年龄字段 setAge(int) 可检查是否在 0–150 范围内,超限则拒绝赋值并提示
- 姓名字段 setName(String) 可判空、去首尾空格、限制长度,避免脏数据入库
- getter 也可返回副本(如返回 new ArrayList(list)),防止外部修改内部集合
同名变量隐藏与 super 访问需明确意图
子类定义与父类同名的字段时,不是“覆盖”,而是“隐藏”。父类字段依然存在,只是被遮住了。
- Son 类中声明 String str = "Son String";,会隐藏 Father 中的 str
- 直接访问 s.str 拿到的是子类自己的值
- 要用 super.str 显式访问父类字段,不能靠“继承自动合并”
静态变量 + private 是类级数据的安全组合
当某个值属于整个类(比如实例计数器、全局配置、单例引用),用 private static 最稳妥。
- static 确保一份内存、所有实例共享;private 阻止外部直接读写
- 想提供访问,就配套写 public static getXxx() 和 setXxx(),同样可加线程安全控制
- 避免把用户登录态、订单状态这类业务变量设为 static,否则多个对象会互相污染
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











