选 public 还是 default,关键看是否需跨包访问:需对外暴露则用 public(如 API 类、框架 Bean),仅包内使用则用 default(如辅助类、私有实现),前者开放但受限于单文件单 public 类,后者安全灵活、利于封装。
选 public 还是 default,关键看这个类是否需要被其他包的代码使用。如果需要跨包访问,必须用 public;如果只在当前包内使用,default 更安全、更合理。
一个类声明为 public,意味着它被设计成对外提供服务的入口。比如工具类(StringUtils)、实体类(User)、接口实现类(ArrayList)等,只要别的模块要实例化或继承它,就必须是 public。
public 类,且文件名必须和类名完全一致(大小写敏感)不加任何修饰符就是 default(也叫包私有)。这类类天然“隐身”于包外,是封装内部逻辑的好选择,比如包内的辅助类、状态枚举、私有异常、测试专用类等。
default 类,也不强制文件名匹配新手容易把所有类都写成 public,结果导致 API 泛滥、依赖混乱、重构困难。反过来,如果把本该对外提供的类设为 default,会导致调用方编译失败,比如 Spring 的 @Service 类若没设 public,注入时会因无法访问构造器而报错。
立即学习“Java免费学习笔记(深入)”;
public,否则反射失败Test 后缀)建议 public,方便测试框架加载JsonHelper)若只被同包 Service 使用,用 default 即可问自己三个问题:
– 这个类会被其他包的代码 new 或 extends 吗?→ 是 → 用 public
– 它只是帮本包里几个类干活的“幕后人员”?→ 是 → 用 default
– 它将来可能被抽成独立模块或 SDK?→ 是 → 优先 public,预留扩展性