Java面试题 — Java中的访问修饰符有哪些?各自的访问范围是什么?

0 阅读4分钟

Author : Cyan_RA9
Source : 【卡码笔记】网站
Question : Java中的访问修饰符有哪些?各自的访问范围是什么?

【简要回答】

四大访问修饰符介绍

  • 访问权限修饰符指的是用来修饰成员变量,成员方法和类,来确定它们的访问权限的修饰符。Java四大访问权限修饰符分别是private、默认、protected,public
    1. public(公开)
    2. protected(受保护,子类可直接跨包访问)
    3. default(默认,即包级私有)
    4. private(私有)

四大访问修饰符权限

  • 四大修饰符按照根据访问权限从小到大的原则依次是 : private < 默认 < protected < public。如下表所示:

    image.png

  • 四大修饰符总结

    1. private修饰符 : 强调自己使用,只能在本类下使用。
    2. 默认 : 强调本包使用,只能在本类,同包下的类中使用。
    3. protected : 强调子类使用,只能在本类,同包下的类,以及其子类中使用。
    4. public : 强调公开使用,没有只能,谁都可以用。

【详细回答】

四大访问修饰符介绍

  1. public
    • 定义:强调公开,没有访问限制,所有类都可以访问。
    • 适用场景:开放给全局使用的类、方法或变量(如工具类、主方法)。
  2. protected
    • 定义允许子类跨包访问 protected修饰的成员。
    • 适用场景:需要被子类继承或覆盖的成员(如父类方法)。
  3. default(默认,无显式修饰符)
    • 定义:权限最大只能是本包下访问
    • 适用场景:包内共享的类或工具方法(无需跨包使用)。
  4. private
    • 定义:强调私有,仅允许当前类内部访问。
    • 适用场景:封装 类内部的实现细节(如成员变量、工具方法)。

四大访问修饰符权限

  • 四大修饰符按照根据访问权限从小到大的原则依次是 : private < 默认 < protected < public。如下表所示:

    image.png

访问修饰符注意事项

  1. 类的访问修饰符
    • 只能使用 publicdefault(无修饰符)。
    • public 类的类名需与文件名一致,且每个文件只能有一个 public 类。
  2. 成员变量与方法
    • 推荐对成员变量使用 private,通过公共方法(public)控制访问(封装性)。
    • protected 方法常用于设计可扩展的父类。
    • 在方法重写中,子类方法的访问权限不能比父类更严格(如父类方法是 protected,子类不能改为 private)。

【知识拓展】

类和源文件的关系

  1. 一个 Java 源文件中可以定义多个类,源文件的基本组成部分是类
  2. 源文件中定义的类,最多只能有一个类被 public 修饰,其他类的个数不限。
  3. 如果源文件中有被 public 修饰的类,那么源文件名必须与该类类名保持一致
  4. 如果源文件中没有被 public 修饰的类,那么源文件名只要符合命名规范就可以。
  5. main函数不一定非得写在 public 修饰的类中,也可以将main函数写在非 public 修饰的类中,然后通过指定运行非 public 类,这样入口方法就是非 public 类的main方法。

内部类和访问权限修饰符的关系

  1. 成员内部类(非静态内部类):
    • 访问修饰符:public、protected、default、private。
    • 可以被访问:如果在外部类是public的前提下,内部类也是public,那么项目下的所有包所有类都可以访问该内部类;如果内部类是protected, 那么同包下的所有类 + 不同包下该外部类的子类 可以访问该内部类。
    • 不能被访问:若外部类为 default,则外包下的所有类(不论是否子类)都无法访问其中的内部类。另外, private 修饰的成员内部类,只能被外部类本身访问。
  2. 静态内部类
    • 访问修饰符:public、protected、default、private。
    • 可以被访问:同上。
    • 不能被访问:同上。
  3. 局部内部类
    • 访问修饰符不支持(局部内部类不能使用访问修饰符)。
    • 可以被访问:仅在定义它的方法或代码块内访问。
    • 不能被访问:方法或代码块外部无法访问。
  4. 匿名内部类
    • 访问修饰符不支持(匿名内部类不能使用访问修饰符)。
    • 可以被访问:仅在定义它的代码块内访问。
    • 不能被访问:代码块外部无法访问。