Java 的访问控制修饰符

        Java 的访问控制修饰符决定了类、方法和字段(成员变量)的可见性,即它们可以被哪些类访问。这些修饰符包括 public、protected、default(也称为包访问级别)和 private。下面是对每个修饰符的详细解释,以及它们在类、方法和字段中的作用、共性规律、注意事项和使用技巧。

1. 访问控制修饰符 


1.1 public 

 类: 被 public 修饰的类可以在任何地方被访问,无论是在同一个包中还是在不同包中的其他类都可以直接使用该类。

方法: 被 public 修饰的方法可以在任何地方被调用,包括类本身、同一个包中的其他类以及不同包中的其他类。

字段: 被 public 修饰的字段可以在任何地方被访问和修改。这意味着其他类可以直接操作该字段。

1.2 protected

 类: protected 不能用于修饰顶层类(即直接声明在包中的类),因此只能用于类的成员(方法或字段)。

方法: 被 protected 修饰的方法可以在同一个包中的其他类中访问,也可以在其他包中的子类中访问(即使子类和父类不在同一个包中)。这是 protected 修饰符的主要特性:提供包访问级别和跨包的继承访问。

字段: 类似于 protected 方法,protected 字段可以在同一个包中的其他类中访问,也可以在其他包中的子类中访问。

1.3 default(无修饰符)

类: 没有修饰符(即 default)的类只能在同一个包中被访问。该类不能被不同包中的类使用。

方法: default 修饰的方法只能在同一个包中的类中被访问,不同包中的类无法访问。

字段: default 修饰的字段只能在同一个包中的类中被访问。

1.4 private

类: private 不能用于修饰顶层类,因此只能用于类的成员(方法或字段)。

方法: 被 private 修饰的方法只能在定义它的类内部被访问,其他类(包括子类)不能访问它。

字段: 被 private 修饰的字段只能在定义它的类内部被访问,其他类(包括子类)不能访问或修改它。

2. 共性规律

        类的访问控制: 顶层类只能使用 public 或 default 修饰符。protected 和 private 不能用于顶层类。内部类(类中的类)可以使用所有四种修饰符。

        成员的访问控制: 所有四种修饰符均可用于类的成员(方法和字段)。访问权限从最宽松到最严格依次是:public > protected > default > private。

        包访问性: protected 和 default 修饰符都允许类的成员在同一个包中被访问。public 提供最宽松的访问权限,允许任何地方访问,而 private 提供最严格的访问权限,只允许类内部访问。

3. 特殊的注意事项和使用技巧

3.1 protected 在继承中的使用

        protected 修饰符在继承关系中尤为重要。它允许子类访问父类的 protected 成员,即使子类和父类位于不同的包中。这为实现类的扩展和代码复用提供了便利。

        使用 protected 修饰构造方法,可以使类只能被同包或子类实例化,这在设计模式(如单例模式)中非常有用。

3.2 private 方法与字段的封装

        private 修饰符强调封装性(Encapsulation),将类的实现细节隐藏起来。通过将方法和字段声明为 private,你可以确保它们不会被外部代码或子类意外修改,这有助于维护代码的完整性和安全性。

        通过提供 public 或 protected 的 getter 和 setter 方法,你可以对字段的访问进行控制,同时保持字段的私有性。

3.3 包访问级别的使用(default)

        default 访问修饰符(即无修饰符)在包内提供了友好的访问控制。它允许包内的类互相访问,而不暴露给包外部。这在实现模块化代码时特别有用,可以将实现细节封装在一个包内,同时暴露有限的接口给外部使用。

3.4 内部类的访问控制

        对于内部类(即类中定义的类),可以使用 private 修饰符将其完全封装在外部类中,只允许外部类本身访问该内部类

        使用 protected 修饰内部类,可以允许包内的类和继承该外部类的子类访问该内部类,这对于实现复杂的继承结构或辅助类非常有用。

3.5 反射与访问控制

        在Java中,使用反射(Reflection)可以绕过访问控制修饰符的限制,直接访问 private 方法或字段。这在某些场景下(如框架、测试等)可能非常有用,但应谨慎使用,以避免破坏封装性和代码的安全性。

  • 13
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值