java四种访问控制权限的总结
今天看了一眼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不能被其他包中的类访问,不管是不是子类。
绕来绕去,最后还是用一张表来总结吧
private | default | protected | public | |
同一类 | yes | yes | yes | yes |
同一包中的类 | yes | yes | yes | |
子类 | yes | yes | ||
其他包中的类 | yes |
java四种访问控制权限的总结相关推荐
- java基础(七) 深入解析java四种访问权限
戳上面的蓝字关注我们哦! 精彩内容 精选java等全套视频教程 精选java电子图书 大数据视频教程精选 java项目练习精选 引言 Java中的访问权限理解起来不难,但完全掌握却不容易,特别是4 ...
- java基础(七) java四种访问权限
###引言 Java中的访问权限理解起来不难,但完全掌握却不容易,特别是4种访问权限并不是任何时候都可以使用.下面整理一下,在什么情况下,有哪些访问权限可以允许选择. ###一.访问权限简介 访问权限 ...
- Java 四种访问权限
一.访问权限控制 指的是本类及本类内部的成员(成员变量.成员方法.内部类)对其他类的可见性,即这些内容是否允许其他类访问.Java 一共有四种访问权限控制,其权限大小为:public > pro ...
- java四种访问权限
java有四种访问权限,它们各自的范围如下图所示 当下列访问修饰符修饰字段和方法时: private 任意位置的子类不可以访问从父类继承的private字段和方法.这里所说的访问包括通过super关键 ...
- java的四种访问权限_Java四种访问权限
一.访问权限简介 访问权限控制: 指的是本类及本类内部的成员(成员变量.成员方法.内部类)对其他类的可见性,即这些内容是否允许其他类访问.Java 中一共有四种访问权限控制,其权限控制的大小情况是这样 ...
- java类默认访问权限_Java的四种访问权限
❝ 所谓访问权限,指的就是本类中的成员变量.成员方法对其他类的可见性 ❞ 试想一想,当我们修改一个非常庞大的项目时,如果所有变量和方法都是公共权限,那么后端中任何类都有权限去修改它的变量和方法,很有可 ...
- Java中的四种访问权限:public、protected、包访问、private
所谓访问权限,指的就是本类中的成员变量.成员方法对其他类的可见性 试想一想,当我们修改一个非常庞大的项目时,如果所有变量和方法都是公共权限,那么后端中任何类都有权限去修改它的变量和方法,很有可能修改后 ...
- java中四种默认的权限修饰符,Java中四种访问权限资料整理
一.Java中有四种访问权限, 其中三种有访问权限修饰符,分别为private.public.protected,还有一种不带任何修饰符(default). 1. private: Java语言中对访 ...
- Java中四种访问权限总结
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 一.Java中有四种访问权限, 其中三种有访问权限修饰符,分别为private.public.pro ...
最新文章
- 贝叶斯网络之父Judea Pearl:要建立真正的人工智能,少不了因果推理
- Linux堆内存管理深入分析
- 自由还是霸权? TPP将撤销政府的数据主权
- C# Task 循环任务_C# Task.Run调用外部参数
- Summary Day30
- SpringMVC默认访问路径配置
- 提高千倍效率的35个编码小技巧,老司机带你飞!
- 5G时代已到,还有哪些值得关心的安全问题?
- 使用 /proc 文件系统
- 游戏中出现服务器维护中怎么办,游戏服务器显示维护中
- 交流有功功率、无功功率、视在功率计算
- 安装hustoj的一些心得及html的笔记
- 米兔机器人自主编程_可编程米兔机器人 让成年人回归童心的玩具
- Tomb.Finance的每周更新(5.16-5.22)「Harry大财主的每周二更新」
- 设计模式——仲裁模式
- 简单实现你想数字电脑猜的小游戏
- oracle sy imp,oracle逻辑备份imp/exp 示例用法【转】
- 怎么把收藏夹变成html文件,用Delphi将IE收藏夹导出为HTML文件
- [CQOI2005]三角形面积并
- FPGA的UART信息回显
热门文章
- [Python错误]NameError: name ‘name’ is not defined
- 使用python解决一元二次方程
- 空姐打飞的上下班会遇害吗?
- unity-真机调试Android
- AOD.Net用户登录认证实验
- ubuntu16.04关闭防火墙命令
- 图解JavaScript闭包面试题
- 寻路算法:A*、NavMesh、WayPoint 区别和应用场景
- 云上建站-服务器选购篇
- Far Cry and Half Life2 Engine scene technique (Dreams_wu原作,转自Sina游戏论坛)