Java 四种访问控制权限

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.rhkb.cn/news/104509.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA中使用Docker插件构建镜像并推送至私服Harbor

一、开启Docker服务器的远程访问 1.1 开启2375远程访问 默认的dokcer是不支持远程访问的,需要加点配置,开启Docker的远程访问 # 首先查看docker配置文件所在位置 systemctl status docker# 会输出如下内容: ● docker.service - Docker Ap…

TensorRT推理手写数字分类(三)

系列文章目录 (一)使用pytorch搭建模型并训练 (二)将pth格式转为onnx格式 (三)onxx格式转为engine序列化文件并进行推理 文章目录 系列文章目录前言一、TensorRT是什么?二、如何通过onnx生成en…

华为云CodeArts Snap 智能编程助手PyCharm实验手册. 插件安装与使用指南

作为一款自主创新的AI代码辅助编程工具,华为云智能编程助手CodeArts Snap目标打造现代化开发新范式。通过将自然语言转化为规范可阅读、无开源漏洞的安全编程语言,提升开发者编程效率,助力企业快速响应市场需求。华为云CodeArts Snap现进入邀…

Python Opencv实践 - 图像直方图均衡化

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) print(img.shape)#图像直方图计算 #cv.calcHist(images, channels, mask, histSize, ranges, hist, accumulate) #images&…

Android中使用JT808协议进行车载终端通信的实现和优化

JT808是一种在中国广泛应用的车载终端通信协议,用于车辆与监控中心之间的数据通信。下面是关于Android平台上使用JT808协议进行通信的一般步骤和注意事项: 协议了解:首先,您需要详细了解JT808协议的规范和定义。该协议包含了通信消…

高速道路监控:工业路由器助力高速监控远程管理与维护

工业路由器在物联网应用中扮演着重要的角色。物联网的发展使得大量设备和传感器能够互联互通,而工业路由器作为连接这些设备和网络的中间桥梁,承担着数据传输和安全管理的重要责任。 工业路由器能够为高速监控提供网络功能,实现户外无线网络部…

基于Java+SpringBoot+vue前后端分离高校办公室行政事务管理系统设计实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

selenium案例之RAM 用户登录 aliyun

文章目录 0x00 Selenium0x01 整体流程 思路1.1 打开浏览器并且访问 登录页面 url: https://signin.aliyun.com/login.htm#/main1.2 定位 "用户名" input 和 "下一步" button 点击下一步1.3 定位 "密码" input 和 "登录" button 点击登…

《Linux从练气到飞升》No.17 进程创建

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

Stable Diffusion web UI 部署详细教程

前言 本文使用 AutoDL 平台进行 Stable Diffusion web UI 云端部署 AutoDL 官网:AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL Stable Diffusion web UI 官网:AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI (github.com) 步…

poi带表头多sheet导出

导出工具类 package com.hieasy.comm.core.excel;import com.hieasy.comm.core.excel.fragment.ExcelFragment; import com.hieasy.comm.core.utils.mine.MineDateUtil; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.*; import org.apache.po…

Cesium 使用 Entity 绘制点线面

文章目录 一、绘制点1. 第一种2. 第二种 二、绘制面三、绘制线四、移除 Entity <!--* Author: HuKang* Date: 2023-08-18 11:06:43* LastEditTime: 2023-08-25 09:16:59* LastEditors: HuKang* Description: program-c* FilePath: \global-data-display\src\views\program-c…

深度学习-实验1

一、Pytorch基本操作考察&#xff08;平台课专业课&#xff09; 使用&#x1d413;&#x1d41e;&#x1d427;&#x1d42c;&#x1d428;&#x1d42b;初始化一个 &#x1d7cf;&#x1d7d1;的矩阵 &#x1d474;和一个 &#x1d7d0;&#x1d7cf;的矩阵 &#x1d475;&am…

深度学习处理文本(NLP)

文章目录 引言1. 反向传播1.1 实例流程实现1.2 前向传播1.3 计算损失1.4 反向传播误差1.5 更新权重1.6 迭代1.7 BackPropagation & Adam 代码实例 2. 优化器 -- Adam2.1 Adam解析2.2 代码实例 3. NLP任务4. 神经网络处理文本4.1 step1 字符数值化4.2 step 2 矩阵转化为向量…

【数据结构练习】单链表OJ题(一)

目录 一、移除链表元素思路1&#xff1a;思路2&#xff1a; 二、反转链表三、链表的中间节点四、链表中倒数第k个节点五、回文结构六、合并两个有序链表 一、移除链表元素 题目&#xff1a; 思路1&#xff1a; 在原来的链表上进行修改&#xff0c;节点的数据是val的删除&am…

Redis三种持久化方式详解

一、Redis持久性 Redis如何将数据写入磁盘 持久性是指将数据写入持久存储&#xff0c;如固态磁盘&#xff08;SSD&#xff09;。Redis提供了一系列持久性选项。其中包括&#xff1a; RDB&#xff08;快照&#xff09;&#xff1a;RDB持久性以指定的时间间隔执行数据集的时间点…

数据结构(7)

B树 B树中允许一个节点拥有多个key。设定参数M&#xff0c;构造B树 1.每个结点最多右M-1个key&#xff0c;并且以升序排列 2.每个结点最多右M个子结点 3.根节点至少右两个子结点 通过磁盘预读&#xff0c;将数据放到B树中&#xff0c;3层B树可容纳1024*1024*1024差不多10亿…

自动化部署及监测平台基本架构

声明 本文是学习 政务计算机终端核心配置规范. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 核心配置自动化部署及监测技术要求 自动化部署及监测平台基本架构 对于有一定规模的政务终端核心配置应用&#xff0c;需要配备自动化部署及监测平台&am…

element plus 的图片上传组件回显

element图片回显是通过修改file-list属性的url属性实现的。 <!-- 图片上传 --><el-form-item label"景区图片" prop"s_img"><el-uploadlist-type"picture-card":action"网址":on-change"handleChange":befor…

机器学习理论笔记(二):数据集划分以及模型选择

文章目录 1 前言2 经验误差与过拟合3 训练集与测试集的划分方法3.1 留出法&#xff08;Hold-out&#xff09;3.2 交叉验证法&#xff08;Cross Validation&#xff09;3.3 自助法&#xff08;Bootstrap&#xff09; 4 调参与最终模型5 结语 1 前言 欢迎来到蓝色是天的机器学习…