Java 四种访问控制权限

news2025/2/25 18:24:36

1.背景:

        针对java的类成员访问控制权限理解

2.Java有四种访问控制权限:

        private,protected,public,default

他们的具体访问权限都是什么呢?用例子来分析一下:

这里要分几个情景:内部访问,继承关系,同包,不同包

(1)首先我们要创建两个包:

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类型之外的类型的属性和方法

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

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

 

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

 

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

(3)那么还有没有别的情况呢?我们来测试一下同一包中,不是继承关系的类,会访问到什么。

在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代表可以访问)
privatedefaultprotectedpublic
同一类yesyesyesyes
同一包中的类yesyesyes
子类yesyes
其他包中的类yes

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/923798.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VR直播现场直击,让你的眼界无限扩大

近日,日本核废水入海闹的沸沸扬扬,我们可以看到有多个直播是在直击日本福岛核污染水排海实时画面,由此可见,直播让我们民众的眼界无限扩大。直播行业现在也是一大热门,但是VR直播则更胜一筹,犹如亲临现场的…

【瑞吉外卖】所遇问题及解决方法

太菜了实习之余瑞吉外卖补充一下基础知识(,不然真啥也不会了。 请输入正确的手机号! 是因为我测试了我的手机号,爆红,以为方法有错。但其实是前端代码检查手机号是否符合规范的语句有点()啊啊…

年中盘点2023最佳中概股:AI东风能加成几分?

互联网中概股有了摘掉“终丐股”帽子的盼头。2023年第二个财报季,阿里、腾讯、百度、网易等头部互联网公司都传来了好消息,营收、利润实现显著增长,释放出积极的信号。而且经历了长达两三年的漫长探底,7月纳斯达克中国金龙指数迎来…

openGauss学习笔记-49 openGauss 高级特性-索引推荐

文章目录 openGauss学习笔记-49 openGauss 高级特性-索引推荐49.1 单query索引推荐49.2 虚拟索引49.3 workload级别索引推荐 openGauss学习笔记-49 openGauss 高级特性-索引推荐 openGauss的索引推荐的功能,共包含三个子功能:单query索引推荐、虚拟索引…

一百六十五、Kettle——用海豚调度器调度Linux资源库中的kettle任务脚本(亲测、附流程截图)

一、目的 在Linux上脚本运行kettle的转换任务、无论是Linux本地还是Linux资源库都成功后,接下来就是用海豚调度Linux上kettle任务 尤其是团队开发中,基本都要使用共享资源库,所以我直接使用海豚调度Linux资源库的kettle任务脚本 二、前提条…

扎实写完这篇博客

(论文阅读) 作者自述:到了新的实验室,原本的实验方向发生了巨大的改变,对自动驾驶和车联网一头雾水,所以从综述入手,了解轨迹预测任务的头尾,以及对于现阶段的研究点做出初步的统计和积累,为后…

高阶数据结构跳表

"想象为翼,起飞~" 跳表简介? skiplist本质上是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树和哈希表的价值是 一样的,可以作为key或者key/value的查找模型。 跳表由来 skiplist是由美国计算…

【SCSS变量】$ | | var | @for | @include | @function | @each 等常用方法使用

SCSS优点:编写清晰、无冗余、语义化的CSS,减少不必要的重复工作 1、变量声明($)和使用2、使用 & 代替父元素3、在HTML中使用 :style{--name: 动态值}自定义属性,在SCSS中用var(--name)函数绑定动态变量值&#xff…

一文搞懂数据中心ip和住宅ip

我们在购买到一个代理后,通过检测网址会看到检测类型会出现有hosting或者具体的某个运营商,代表这是两种不同的代理:数据中心代理以及isp住宅代理。 1、什么是isp住宅代理 ISP 全称为 Internet Service Provider(互联网服务提供…

C语言之feof与fgetc应用实例(八十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

【FreeRTOS】【STM32】中断详细介绍

文章目录 一、三种优先级的概念辨析1. 先理清楚两个概念:CPU 和 MPU2. Cortex-M3 内核与 STM32F1XX 控制器有什么关系3. 优先级的概念辨析① Cortex-M3 内核和 STM32F1XX 的中断优先级② FreeRTOS 的任务的优先级 二、 Cortex-M3 内核的中断优先级1. 中断编号2. 优先…

XD转Sketch完美实现,这款神器助你轻松转换设计文件

Adobe XD和Sketch作为主流设计软件,却存在文件格式不兼容的痛点。设计师经常需要在两款软件之间互相转换设计稿件,头疼不已。那么有没有一种简单快捷的方法实现XD到Sketch的格式转换呢?答案是有的!今天就来看看这个神奇的在线互转工具。 XD转Sketch,在线免费转 这…

栈和队列在数据结构中的应用

文章目录 理解栈和队列的概念及其特点栈的应用和操作队列的应用和操作结论 🎉欢迎来到数据结构学习专栏~探索栈和队列在数据结构中的应用 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客🎈该系列文章专栏:…

基于YOLOV8模型和Kitti数据集的人工智能驾驶目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要:基于YOLOV8模型和Kitti数据集的人工智能驾驶目标检测系统可用于日常生活中检测与定位车辆、汽车等目标,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用…

Linux之基础IO文件系统讲解

基础IO文件系统讲解 回顾C语言读写文件读文件操作写文件操作输出信息到显示器的方法stdin & stdout & stderr总结 系统文件IOIO接口介绍文件描述符fd文件描述符的分配规则C标准库文件操作函数简易模拟实现重定向dup2 系统调用在minishell中添加重定向功能 FILE文件系统…

【项目管理】PMP考试总结

2023年08月19日考完了PMP,总结一下子 1、花费费用 先算下花费及购置的材料: 5月14日:书-拼多多 PMBOK指南第七版,19.8 5月28日:书-淘宝: 敏捷实践指南,30.49, PMBOK指南第6版&…

将一个树形结构的数据平铺成一个一维数组(vue3)

一、需求描述 由于自带组件库没有具体完善,无法实现像element-ui这种可以多选选择任意一级的选项,也就是说,选择父级的时候不会联动选择子级的全部 例如: 所以,才会出现【二、案例场景】类似的场景,可以用来多选 ,并可以实现单选父级而不关联子级,选择了将树状数据进…

浅谈 Linux 下 vim 的使用

Vim 是从 vi 发展出来的一个文本编辑器,其代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。 Vi 是老式的字处理器,功能虽然已经很齐全了,但还有可以进步的地方。Vim 可以说是程序开发者的一项很好用的工…

AutoSAR配置与实践(基础篇)3.6 BSW的WatchDog功能

3.6 BSW的WatchDog功能 一、WatchDog功能介绍1.1 WatchDog 模块组成1.2 内外部看门狗区别和原理1.3 常见看门狗校验方式一、WatchDog功能介绍 1.1 WatchDog 模块组成 WatchDog 即看门狗功能。这个看门狗不是真正看家的狗,而是软件的一个模块,但是因为功能类似故以此起名。主…

LeetCodeHot100python版本:单调栈,栈,队列,堆

单调栈 739. 每日温度 42. 接雨水 双指针 单调栈(横向求解) ​​​​​​84. 柱状图中最大的矩形 栈和队列 队列:先入先出 栈:先入后出 两个栈 模拟 队列 一个队列 可以模拟 栈 20. 有效的括号 ​​​​​​155. 最小栈 394. 字符串解码 堆 215. 数组中的第K个最大元素 3…