访问控制符 区别

权限高

              public           全部可见

              protected      本类可见,同包可见,子类可见

              default          本类可见,同包可见

              private          本类可见

权限低

在面向对象编程中,访问控制修饰符用于限制类、方法、变量等成员的可见性和可访问性。不同语言(如Java和C++)对这些修饰符的实现可能略有差异,但基本概念是相似的。以下是常见的四种访问控制修饰符:`public`、`protected`、`private` 和默认(default,也称为包私有或友好型)的区别及其用法。 ### public - `public` 是最宽松的访问级别。 - 被 `public` 修饰的类、方法或变量可以被任何其他类访问,无论这些类是否位于同一个包中。 - 在 Java 中,如果一个类被声明为 `public`,则它必须与文件名同名,并且只能有一个 `public` 类存在于一个源文件中 [^2]。 ### protected - `protected` 提供了比 `public` 更严格的访问控制,但仍允许继承机制发挥作用。 - 被 `protected` 修饰的成员可以在同一包内被访问,也可以被不同包中的子类访问。 - 这意味着即使子类不在同一个包里,只要它是从定义了 `protected` 成员的类派生而来,就可以访问该成员 [^4]。 ### default (无显式修饰符) - 当没有使用任何访问修饰符时,默认就是这种访问级别。 - 默认访问级别的成员只能在同一包内的类之间访问;对于外部包来说是不可见的,包括那些继承了此类的子类也不能访问非同包的默认成员 [^2]。 ### private - `private` 是最严格的访问级别。 - 被 `private` 修饰的成员仅在其被声明的那个类内部可见,不能通过对象实例来访问,也不能被继承或覆盖。 - 它确保了数据的安全性,因为只有拥有该成员的类才能修改其状态 [^3]。 ### 访问权限对比表 | 访问级别 | 同一类 | 同一包 | 不同包的子类 | 所有其他位置 | |------------|--------|--------|----------------|----------------| | `public` | √ | √ | √ | √ | | `protected`| √ | √ | √ | × | | `default` | √ | √ | × | × | | `private` | √ | × | × | × | ### 示例代码 以下是一个简单的 Java 示例,演示如何使用不同的访问修饰符: ```java // 文件名: Animal.java package com.example; public class Animal { public String publicName = "Public Name"; // 可以被所有类访问 protected String protectedName = "Protected Name"; // 包内及子类访问 String defaultName = "Default Name"; // 默认访问级别,仅限包内访问 private String privateName = "Private Name"; // 仅限本类访问 // 公共方法 public void sayHello() { System.out.println("Hello from a public method."); } // 受保护的方法 protected void sayProtectedHello() { System.out.println("Hello from a protected method."); } // 默认访问级别的方法 void sayDefaultHello() { System.out.println("Hello from a default access method."); } // 私有方法 private void sayPrivateHello() { System.out.println("Hello from a private method."); } } ``` ### 注意事项 - 对于顶层类(即不是嵌套或内部类的类),它们只能具有 `public` 或默认访问级别。不能将顶层类标记为 `private` 或 `protected` [^1]。 - 内部类则可以应用所有的访问修饰符,包括 `private` 和 `protected`。 通过合理地使用访问控制修饰符,开发者能够更好地封装信息,提高程序的安全性和维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值