i.MX异构多核系统实战:Linux与RTOS协同的AMP架构设计与Remoteproc管理
2026/6/21 9:16:50
Java 一共有 4 个访问修饰符,用来限制类的成员(变量、方法)在不同位置能否被访问,权限范围从大到小排序:
// 示例:public 修饰符在不同包/子类中的访问情况// com.example.package1packagecom.example.package1;publicclassPublicExample{publicStringpublicField="公共字段";publicvoidpublicMethod(){System.out.println("公共方法");}}// com.example.package2packagecom.example.package2;importcom.example.package1.PublicExample;publicclassTestPublic{publicvoidtest(){PublicExampleexample=newPublicExample();System.out.println(example.publicField);// ✅ 可以访问example.publicMethod();// ✅ 可以访问}}// com.example.package2 的子类packagecom.example.package2;importcom.example.package1.PublicExample;publicclassSubClassextendsPublicExample{publicvoidtest(){System.out.println(publicField);// ✅ 可以访问(继承)publicMethod();// ✅ 可以访问(继承)}}// 示例:protected 修饰符在不同包/子类中的访问情况// com.example.package1packagecom.example.package1;publicclassProtectedExample{protectedStringprotectedField="受保护字段";protectedvoidprotectedMethod(){System.out.println("受保护方法");}publicvoidtestInSameClass(){System.out.println(protectedField);// ✅ 本类可以访问protectedMethod();// ✅ 本类可以访问}}// com.example.package1 的同包类packagecom.example.package1;publicclassSamePackageClass{publicvoidtest(){ProtectedExampleexample=newProtectedExample();System.out.println(example.protectedField);// ✅ 同包类可以访问example.protectedMethod();// ✅ 同包类可以访问}}// com.example.package2 的子类packagecom.example.package2;importcom.example.package1.ProtectedExample;publicclassSubClassextendsProtectedExample{publicvoidtest(){System.out.println(protectedField);// ✅ 不同包子类可以访问(继承)protectedMethod();// ✅ 不同包子类可以访问(继承)}}// com.example.package2 的非子类(无法访问)packagecom.example.package2;importcom.example.package1.ProtectedExample;publicclassOtherPackageClass{publicvoidtest(){ProtectedExampleexample=newProtectedExample();// System.out.println(example.protectedField); // ❌ 编译错误:不同包非子类不能访问// example.protectedMethod(); // ❌ 编译错误:不同包非子类不能访问}}// 示例:默认权限在不同包/子类中的访问情况// com.example.package1packagecom.example.package1;publicclassDefaultExample{StringdefaultField="默认权限字段";// 没有修饰符,即默认权限voiddefaultMethod(){System.out.println("默认权限方法");}publicvoidtestInSameClass(){System.out.println(defaultField);// ✅ 本类可以访问defaultMethod();// ✅ 本类可以访问}}// com.example.package1 的同包类packagecom.example.package1;publicclassSamePackageClass{publicvoidtest(){DefaultExampleexample=newDefaultExample();System.out.println(example.defaultField);// ✅ 同包类可以访问example.defaultMethod();// ✅ 同包类可以访问}}// com.example.package2 的子类(无法访问)packagecom.example.package2;importcom.example.package1.DefaultExample;publicclassSubClassextendsDefaultExample{publicvoidtest(){// System.out.println(defaultField); // ❌ 编译错误:不同包子类不能访问默认权限成员// defaultMethod(); // ❌ 编译错误:不同包子类不能访问默认权限方法}}// com.example.package2 的非子类(无法访问)packagecom.example.package2;importcom.example.package1.DefaultExample;publicclassOtherPackageClass{publicvoidtest(){DefaultExampleexample=newDefaultExample();// System.out.println(example.defaultField); // ❌ 编译错误:不同包类不能访问// example.defaultMethod(); // ❌ 编译错误:不同包类不能访问}}// 示例:private 修饰符在不同包/子类中的访问情况// com.example.package1packagecom.example.package1;publicclassPrivateExample{privateStringprivateField="私有字段";privatevoidprivateMethod(){System.out.println("私有方法");}// 提供公共访问方法(封装)publicStringgetPrivateField(){returnprivateField;}publicvoidsetPrivateField(Stringvalue){this.privateField=value;}publicvoidcallPrivateMethod(){privateMethod();// ✅ 本类可以访问私有方法}publicvoidtestInSameClass(){System.out.println(privateField);// ✅ 本类可以访问privateMethod();// ✅ 本类可以访问}}// com.example.package1 的同包类(无法访问)packagecom.example.package1;publicclassSamePackageClass{publicvoidtest(){PrivateExampleexample=newPrivateExample();// System.out.println(example.privateField); // ❌ 编译错误:同包类不能访问私有成员// example.privateMethod(); // ❌ 编译错误:同包类不能访问私有方法// 只能通过公共方法访问System.out.println(example.getPrivateField());// ✅ 通过getter访问example.callPrivateMethod();// ✅ 通过公共方法间接调用私有方法}}// com.example.package2 的子类(无法访问)packagecom.example.package2;importcom.example.package1.PrivateExample;publicclassSubClassextendsPrivateExample{publicvoidtest(){// System.out.println(privateField); // ❌ 编译错误:子类不能访问父类私有成员// privateMethod(); // ❌ 编译错误:子类不能访问父类私有方法// 只能通过继承的公共方法访问System.out.println(getPrivateField());// ✅ 通过继承的getter访问callPrivateMethod();// ✅ 通过继承的公共方法间接调用}}// com.example.package2 的非子类(无法访问)packagecom.example.package2;importcom.example.package1.PrivateExample;publicclassOtherPackageClass{publicvoidtest(){PrivateExampleexample=newPrivateExample();// System.out.println(example.privateField); // ❌ 编译错误:外部类不能访问// example.privateMethod(); // ❌ 编译错误:外部类不能访问// 只能通过公共方法访问System.out.println(example.getPrivateField());// ✅ 通过公共getter访问example.callPrivateMethod();// ✅ 通过公共方法间接调用}}| 修饰符 | 本类 | 同包类 | 不同包子类 | 任意外部类 |
|---|---|---|---|---|
| public | ✅ | ✅ | ✅ | ✅ |
| protected | ✅ | ✅ | ✅ | ❌ |
| 默认(缺省) | ✅ | ✅ | ❌ | ❌ |
| private | ✅ | ❌ | ❌ | ❌ |
类名.变量名(推荐)、对象名.变量名。this、super关键字。new创建对象,用来被子类继承,强制子类实现抽象方法。⚠️注意:abstract和final不能同时修饰一个方法,抽象方法需要子类重写,final禁止重写,二者矛盾。
transient修饰的变量不会被保存到文件中。private、protected、public三者不能同时出现两个。abstract不能和final、private、static一起修饰方法。static方法不能使用this、super。public、abstract、final三个修饰符。public/protected/默认/private):管「能不能访问」。static:管「属于类还是对象」。final:管「能不能修改、重写、继承」。abstract:管「是否需要子类实现」。transient/volatile/synchronized:多用于 IO、多线程高级场景。