Java面试题更新 2026-08-05

Java 访问修饰符 public、private、protected 以及无修饰符(默认包私有)各自的作用范围是什么?请说明它们的区别。

技术原理Java

考察说明

考查对 Java 访问控制机制的理解,包括各类修饰符的可见性范围及适用场景。

回答思路

  1. 【回答框架 1】Java 有四种访问级别,按可见性从大到小依次为 public、protected、默认(包私有)、private。public 对所有类可见;protected 对同包类及不同包的子类可见;默认(无修饰符)仅对同包类可见;private 仅对当前类内部可见。
  2. 【回答框架 2】访问修饰符主要用于封装,隐藏内部实现细节,控制外部访问权限。public 适用于对外公开的 API 接口;protected 适合需要被子类继承或重写的方法和字段;默认包私有适合同一包内协作的类;private 适合类内部实现细节,避免外部直接修改。
  3. 【回答框架 3】需要注意的是,protected 在不同包中仅对子类可见,且子类通过继承访问时,不能通过父类引用在不同包中访问 protected 成员。默认修饰符不是 reserved word,而是不加任何修饰符时的缺省状态。
  4. 【回答框架 4】实际编码中,应尽量使用最小访问权限原则,优先 private,必要时提升为 protected 或 public。过度使用 public 会增加耦合,降低封装性。
  5. 【关键点 1】public:对所有类可见;protected:同包或不同包的子类可见;默认(包私有):仅同包可见;private:仅当前类可见。
  6. 【关键点 2】protected 在不同包中仅子类可访问,且子类通过继承关系访问,不能通过父类引用访问。
  7. 【关键点 3】无修饰符是包私有,不是 Java 关键字。
  8. 【关键点 4】建议遵循最小访问权限原则,封装内部实现。
  9. 【易错点 1】误认为 protected 对所有子类实例可见,忽略包外子类只能通过自身引用访问的限制。
  10. 【易错点 2】混淆默认修饰符与 public,导致包外类无法访问。
  11. 【易错点 3】忽略访问修饰符对继承和重写的影响,如子类不能降低父类方法的可见性。