Java面试:访问修饰符 public,private,protected,以及不写(默认)时的区别?

Java面试:访问修饰符 public,private,protected,以及不写(默认)时的区别?
最新回答
守护在此方

2026-05-10 05:20:40

Java中访问修饰符public、private、protected以及默认(不写)时的区别

在Java中,访问修饰符用于控制类、方法、变量等成员的访问权限。主要有四种访问修饰符:public、private、protected和默认(不写)。以下是它们之间的详细区别:

  • public

    同一类:可以访问

    同一包:可以访问

    子类:可以访问

    其他包:可以访问

    说明:public修饰的成员是公有的,可以被任何类访问,无论它们是否在同一个包中。这是最为开放的访问权限。

  • private

    同一类:可以访问

    同一包:不可以访问

    子类:不可以访问

    其他包:不可以访问

    说明:private修饰的成员是私有的,只能被其所在类访问,其他类(包括子类)都无法访问。这是最为封闭的访问权限。

  • protected

    同一类:可以访问

    同一包:可以访问

    子类:可以访问

    其他包:不可以访问

    说明:protected修饰的成员是受保护的,可以被同一个包中的其他类访问,也可以被不在同一个包中的子类访问。这种访问权限既保证了类的封装性,又允许子类继承和使用父类的受保护成员。

  • 默认(不写)

    同一类:可以访问

    同一包:可以访问

    子类:不可以访问

    其他包:不可以访问

    说明:如果一个成员没有使用任何访问修饰符,那么它将被视为默认访问权限。这种成员只能被同一个包中的其他类访问,而不能被其他包中的类(包括子类)访问。这种访问权限适用于那些只需要在同一个包内部共享的成员。

总结

  • public和private是完全相反的两种访问修饰符。public意味着公共的,可以在任何地方被访问;而private则意味着私有的,只能在当前类中被访问。
  • protected比默认访问权限多了一种对继承者的限制,即只有当前成员所在类的子类(无论是否在同一个包中)可以访问,其他类(包括同一包中的其他类)都无法访问。
  • 默认访问权限的成员只能在同一个包中的其他类被访问,这是Java提供的一种基本的封装机制。

通过合理使用这些访问修饰符,可以控制类的成员的可见性和访问权限,从而保证类的信息不被无关访问者获取和修改。同时,也能够方便地复用和维护代码。在使用访问修饰符时,需要根据实际情况选择最合适的访问权限,以达到最佳的封装效果和代码复用性。