java的class的四种修饰符public protected default private

权限访问级别详解:从类内到包外的Java公开特性
本文详细解读Java中不同访问修饰符的层次结构,包括public、protected、default和private,帮助理解类内、包内、子类及包外的权限控制.

表示的访问级别不同

                        类内    保内  子类  包外

public                *        *        *        *

protected        *         *        *

default              *        *

private                *

### Java 访问控制修饰符的区别与使用场景 Java 中的访问控制修饰符用于定义类、方法、变量等成员的可见性和可访问范围。这些修饰符包括 `public`、`private`、`protected` 和默认(`default`),它们分别具有不同的访问权限和适用场景。 #### 1. **`public` 修饰符** `public` 是最具开放性的访问修饰符,允许任何其他类或对象访问被修饰的成员。无论是同一个包内还是不同包中的类,都可以自由地访问 `public` 成员[^1]。 - **特点**: - 具有最大的访问权限。 - 可以被任何位置的代码访问。 - **使用场景**: - 提供对外接口时使用。 - 当希望某个类或方法可以被广泛调用时。 ```java public class PublicClass { public void publicMethod() { System.out.println("This is a public method."); } } ``` #### 2. **`private` 修饰符** `private` 是最严格的访问修饰符,限制了成员只能在定义它的类内部访问。外部类或其他类无法直接访问 `private` 成员[^3]。 - **特点**: - 仅限于类的内部访问。 - 外部类即使通过实例也无法访问。 - **使用场景**: - 封装类的内部实现细节。 - 防止外部代码对类的内部状态进行直接修改。 ```java class PrivateClass { private int privateField; public void setPrivateField(int value) { this.privateField = value; } public int getPrivateField() { return privateField; } } ``` #### 3. **`protected` 修饰符** `protected` 修饰符允许同一包内的类以及子类访问被修饰的成员。这意味着即使在不同包中,只要存在继承关系,子类仍然可以访问父类的 `protected` 成员[^2]。 - **特点**: - 同包内所有类均可访问。 - 子类(无论是否在同一包中)也可以访问。 - **使用场景**: - 提供子类对父类成员的访问权限。 - 在继承体系中共享部分实现细节。 ```java class ProtectedClass { protected void protectedMethod() { System.out.println("This is a protected method."); } } class SubClass extends ProtectedClass { public void callProtectedMethod() { protectedMethod(); // 子类可以访问父类的 protected 方法 } } ``` #### 4. **默认(`default`)修饰符** 默认访问控制(也称为包级访问控制)是当类、方法或变量没有显式指定访问修饰符时使用的访问级别。它允许同一包内的类访问,但不允许跨包访问[^3]。 - **特点**: - 同一包内的类可以访问。 - 不同包中的类无法访问。 - **使用场景**: - 在同一包内共享某些功能时使用。 - 避免不必要的跨包依赖。 ```java class DefaultClass { void defaultMethod() { System.out.println("This is a default method."); } } ``` #### 总结表格 | 访问修饰符 | 同一类 | 同一包内其他类 | 子类(不同包) | 不同包非子类 | |--------------|--------|----------------|----------------|---------------| | `public` | √ | √ | √ | √ | | `protected` | √ | √ | √ | × | | `default` | √ | √ | × | × | | `private` | √ | × | × | × | #### 注意事项 - Java 的访问控制是在编译时进行检查的,运行时并不会留下访问控制的痕迹。通过反射机制,可以绕过访问控制限制,访问私有成员或方法[^4]。 - 内部类可以使用 `private` 修饰符,表示该内部类只能在其外部类中使用。 ### 示例代码 以下是一个综合示例,展示了不同访问修饰符的使用: ```java package example; public class AccessModifiersExample { public String publicField = "Public Field"; private String privateField = "Private Field"; protected String protectedField = "Protected Field"; String defaultField = "Default Field"; public void publicMethod() { System.out.println("Public Method"); } private void privateMethod() { System.out.println("Private Method"); } protected void protectedMethod() { System.out.println("Protected Method"); } void defaultMethod() { System.out.println("Default Method"); } } ``` ```java package anotherPackage; import example.AccessModifiersExample; public class AnotherClass extends AccessModifiersExample { public static void main(String[] args) { AccessModifiersExample example = new AccessModifiersExample(); System.out.println(example.publicField); // 可以访问 // System.out.println(example.privateField); // 编译错误 System.out.println(example.protectedField); // 可以访问 // System.out.println(example.defaultField); // 编译错误 example.publicMethod(); // 可以访问 // example.privateMethod(); // 编译错误 example.protectedMethod(); // 可以访问 // example.defaultMethod(); // 编译错误 } } ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值