今天看了一眼java基础,看到了java的类成员访问控制权限这部分,不觉有些混乱,所以在这里梳理一下。

java有四种访问控制权限:private,protected,public,default。他们的具体访问权限都是什么呢,我用例子来分析一下。

这里要分几个情景,内部访问,继承关系,同包,不同包,首先我们要创建两个包:

com.test.accessrights.pk1和com.test.accessrights.pk2 用来测试不同包之间的访问权限区别。

然后创建一个Father类作为父类,放在pk1包中,然后创建如下四个属性:

public class Father {private String param1 ="这是private";protected String param2 ="这是protected";public String param3 = "这是public";String param4 ="这是default";
}

然后在Father类内部测试四个属性能否访问:

public class Father {private String param1 ="这是private";protected String param2 ="这是protected";public String param3 = "这是public";String param4 ="这是default";public static void main(String[] args) {Father father = new Father();System.out.println("father 实例访问:"+father.param1);System.out.println("father 实例访问:"+father.param2);System.out.println("father 实例访问:"+father.param3);System.out.println("father 实例访问:"+father.param4);}
}

代码没有编译错误,由此可见,四种类型都支持类内部访问

接下来在pk1包中建一个Child类,继承Father类,分别通过Father的对象和Child的对象访问属性

public class Child extends Father{public static void main(String[] args) {Father father = new Father();System.out.println(father.param2);System.out.println(father.param3);System.out.println(father.param4);Child child = new Child();System.out.println(child.param2);System.out.println(child.param3);System.out.println(child.param4);}
}

由此可见,在同一个包中,子类可以访问父类除private类型之外的类型的属性和方法

那么如果不在同一个包中,子类的访问权限是否还和上面的例子一样呢?

我们在pk2包中创建一个Child2类,继承自Father类,创建一个Father的对象,访问其属性发现只能访问到param3,也就是public类型的,而其他类型的都不能访问。

那么我创建一个Child2类的对象,通过子类访问父类属性,看看如何,发现它可以访问param2,和param3,也就是protected和public类型

由此可以看出,对于private来说,只能类内访问,对于protected,目前来看,除了内部访问,也可以被子类访问,即使不同包中。而对于default,除了内部访问外,子类如果访问的话必须满足同包的条件,public则目前没有限制。

那么还有没有别的情况呢,我们来测试一下同一包中,不是继承关系的类,会访问到什么。在pk1包中,创建一个Stranger类,创建Father,Child,Child2对象,看看访问属性的情况。

public class Stranger {public static void main(String[] args) {Father father=new Father();System.out.println("father对象访问:"+father.param2);System.out.println("father对象访问:"+father.param3);System.out.println("father对象访问:"+father.param4);Child child = new Child();System.out.println("child对象访问:"+child.param2);System.out.println("child对象访问:"+child.param3);System.out.println("child对象访问:"+child.param4);Child2 child2 =new Child2();System.out.println("child2对象访问:"+child2.param2);System.out.println("child2对象访问:"+child2.param3);}
}

Father对象和Child对象都能访问出param1以外的其他属性,这说明同包protected满足同包中非子类访问,default也满足同包中非子类访问。而Child2对于Stranger来说不是同包的类,所以Stranger只能访问Child2的param2,和param3属性,这说明什么?

我们再在pk2中创建一个Stranger2类,用它去访问Father,Child,Child2对应的属性。

public class Stranger2 {public static void main(String[] args) {Father father=new Father();System.out.println("father 实例访问:"+father.param3);Child child = new Child();System.out.println("child 实例访问:"+child.param3);Child2 child2 = new Child2();System.out.println("child2 实例访问:"+child2.param3);}
}

最后我发现,只能访问param3,也就是public,至此可以知道,最起码public是没有任何限制的,而private则限制最大,那么其他两种,protected和default,有什么规则呢。从上面的例子可以看出,在同一个包中,Father类的protected属性可以被子类访问,也可以被同包中其他类访问,在其他包中,protected属性只能在子类里通过子类对象访问,不能通过father对象访问,而在其他类里则也访问不到,在同一个包中,Father类的default属性可以被子类访问到,也可以被同一包中的其他类访问,从Stranger2类中的例子中得出结论是,default不能被不同包中的其他类访问到,而在Stranger类中却不能通过child2访问该属性,并且通过Child2类的例子,可以看出,child2对象也不能访问到Father类的default属性,说明default也不能被其他包的子类访问,所以default不能被其他包中的类访问,不管是不是子类。

绕来绕去,最后还是用一张表来总结吧

访问控制权限(yes代表可以访问)
  private default protected public
同一类 yes yes yes yes
同一包中的类   yes yes yes
子类     yes yes
其他包中的类       yes

java四种访问控制权限的总结相关推荐

  1. java基础(七) 深入解析java四种访问权限

    戳上面的蓝字关注我们哦! 精彩内容 精选java等全套视频教程 精选java电子图书 大数据视频教程精选 java项目练习精选 引言   Java中的访问权限理解起来不难,但完全掌握却不容易,特别是4 ...

  2. java基础(七) java四种访问权限

    ###引言 Java中的访问权限理解起来不难,但完全掌握却不容易,特别是4种访问权限并不是任何时候都可以使用.下面整理一下,在什么情况下,有哪些访问权限可以允许选择. ###一.访问权限简介 访问权限 ...

  3. Java 四种访问权限

    一.访问权限控制 指的是本类及本类内部的成员(成员变量.成员方法.内部类)对其他类的可见性,即这些内容是否允许其他类访问.Java 一共有四种访问权限控制,其权限大小为:public > pro ...

  4. java四种访问权限

    java有四种访问权限,它们各自的范围如下图所示 当下列访问修饰符修饰字段和方法时: private 任意位置的子类不可以访问从父类继承的private字段和方法.这里所说的访问包括通过super关键 ...

  5. java的四种访问权限_Java四种访问权限

    一.访问权限简介 访问权限控制: 指的是本类及本类内部的成员(成员变量.成员方法.内部类)对其他类的可见性,即这些内容是否允许其他类访问.Java 中一共有四种访问权限控制,其权限控制的大小情况是这样 ...

  6. java类默认访问权限_Java的四种访问权限

    ❝ 所谓访问权限,指的就是本类中的成员变量.成员方法对其他类的可见性 ❞ 试想一想,当我们修改一个非常庞大的项目时,如果所有变量和方法都是公共权限,那么后端中任何类都有权限去修改它的变量和方法,很有可 ...

  7. Java中的四种访问权限:public、protected、包访问、private

    所谓访问权限,指的就是本类中的成员变量.成员方法对其他类的可见性 试想一想,当我们修改一个非常庞大的项目时,如果所有变量和方法都是公共权限,那么后端中任何类都有权限去修改它的变量和方法,很有可能修改后 ...

  8. java中四种默认的权限修饰符,Java中四种访问权限资料整理

    一.Java中有四种访问权限, 其中三种有访问权限修饰符,分别为private.public.protected,还有一种不带任何修饰符(default). 1. private: Java语言中对访 ...

  9. Java中四种访问权限总结

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 一.Java中有四种访问权限, 其中三种有访问权限修饰符,分别为private.public.pro ...

最新文章

  1. 贝叶斯网络之父Judea Pearl:要建立真正的人工智能,少不了因果推理
  2. Linux堆内存管理深入分析
  3. 自由还是霸权? TPP将撤销政府的数据主权
  4. C# Task 循环任务_C# Task.Run调用外部参数
  5. Summary Day30
  6. SpringMVC默认访问路径配置
  7. 提高千倍效率的35个编码小技巧,老司机带你飞!
  8. 5G时代已到,还有哪些值得关心的安全问题?
  9. 使用 /proc 文件系统
  10. 游戏中出现服务器维护中怎么办,游戏服务器显示维护中
  11. 交流有功功率、无功功率、视在功率计算
  12. 安装hustoj的一些心得及html的笔记
  13. 米兔机器人自主编程_可编程米兔机器人 让成年人回归童心的玩具
  14. Tomb.Finance的每周更新(5.16-5.22)「Harry大财主的每周二更新」
  15. 设计模式——仲裁模式
  16. 简单实现你想数字电脑猜的小游戏
  17. oracle sy imp,oracle逻辑备份imp/exp 示例用法【转】
  18. 怎么把收藏夹变成html文件,用Delphi将IE收藏夹导出为HTML文件
  19. [CQOI2005]三角形面积并
  20. FPGA的UART信息回显

热门文章

  1. [Python错误]NameError: name ‘name’ is not defined
  2. 使用python解决一元二次方程
  3. 空姐打飞的上下班会遇害吗?
  4. unity-真机调试Android
  5. AOD.Net用户登录认证实验
  6. ubuntu16.04关闭防火墙命令
  7. 图解JavaScript闭包面试题
  8. 寻路算法:A*、NavMesh、WayPoint 区别和应用场景
  9. 云上建站-服务器选购篇
  10. Far Cry and Half Life2 Engine scene technique (Dreams_wu原作,转自Sina游戏论坛)