前言
相信大家在平时的工作中对于 public 和 private 的修饰权限是用的比较多的. 对于 protected 和无修饰符用的是比较少的. 我也一样, 在读书的时候, 又看到了这个问题, 于是, 在此进行总结和详细的钻研, 来认真区分这些修饰符. 分享给大家, 供大家参考.
导图
我们先来看一张总体的导图, 对这几个访问权限进行一个总体的了解. 然后我们通过示例进行分别验证.
我们在进行实例验证的时候, 也是由类内部, 同个包, 子类和其他范围进行验证.
public 修饰符
类内部
我们定义一个类, 在类内部是可以正常访问变量的.
- public class PublicVar {
- public String pubicString;
- public void test() {
- String s = pubicString;
- }
- }
同个包
在当前类的同包下, 建立一个类, 创建对象, 发现可以正常访问类的 public 变量.
- public class PublicVarSamePackage {
- public void test(){
- PublicVar publicVar = new PublicVar();
- String a = publicVar.pubicString;
- }
- }
子类
- public class ChildrenPublicVar extends PublicVar {
- public void test(){
- String s = pubicString;
- }
- }
子类中可以访问到父类的 public 变量. 需要说明的是, 子类无论是在同包下还是非同包下都可以.
其他范围
其他范围我们可以理解为在其他包的类能否访问到 public 变量. 这里是可以的.
- public class PublicVarDiffPackage {
- public void test(){
- PublicVar publicVar = new PublicVar();
- String a = publicVar.pubicString;
- }
- }
protected 修饰符
类内部
与 public 修饰符一样, 在类内部是可以正常访问的.
- public class ProtectedVar {
- protected String protectedString;
- public void test() {
- String s = protectedString;
- }
- }
同个包
与当前类在同一个包下的类可以正常访问变量.
- public class ProtectedVarSamePackage {
- public void test(){
- ProtectedVar protectedVar = new ProtectedVar ();
- String a = protectedVar.protectedString;
- }
- }
子类
当是子类的时候, 无论该子类与父类在同一包下还是不同包下, 都可以正常访问该变量.
- public class ChildrenProtectedVar extends ProtectedVar {
- public void test(){
- String s = protectedString;
- }
- }
其他范围
其他范围的时候, 如果与当前类在同一包下, 则可以访问该 protected 变量. 如果不在同一包下, 则不可以访问编译器会报错.
private 修饰符
类内部
private 修饰的变量在类的内部可以正常访问.
同个包
同个包下的其他类不可访问 private 变量.
子类
子类也不可以访问 private 变量.
其他范围
其他范围也不可访问类的 private 变量.
无修饰符
无修饰符和 protected 修饰符在类内部, 同包, 其他范围的访问模式, 但是对于子类, 就有一些不一样了.
类内部
可以正常访问.
同包
可以正常访问.
其他范围
可以正常范围.
子类
子类这里要重点介绍一下, 当子类与父类在同一包下的时候, 子类可以访问父类的无修饰符变量.
当子类与父类不同包的时候, 子类无法访问父类的无修饰符变量. 编译器会提示报错.
总结
支持修饰符修饰变量的作用范围就介绍到此. 希望大家已经理解. 主要注意无修饰符的子类访问情况即可.
来源: https://www.cnblogs.com/jichi/p/12081210.html