java中的访问修饰符详解

2023-11-14

主要讲述一下java中protected的修饰控制范围
  在叙述protected修饰符使用之前,先来说一下java,可以发现,开发java程序是一个时时刻刻都在编写类、开发类、定义类的过程。类里面可以有main方法。(main方法不管存在那个类中,都要通过打点的方式调用某个类的成员)

在当前类的定义中,main方法之外,可以直接通过成员的名字来使用本类中的成员变量,不管这个成员是什么访问修饰符修饰的,也不用通过对象打点调用的方式进行,当前类的main方法中,可以通过对象打点的方式调用。所以说访问控制修饰符在当前类的定义中相当于没有起到任何作用。但是java程序的开发,不仅仅是开发一个类而已,更多的是类之间的相互耦合,换句话说就是一个已经定义好的类,需要作为另一个类的成员,或者是成为另一个类的局部变量(在方法中声明的)、或者是成为基类被子类继承等,也只有在这个时候访问控制修饰符才会起到访问控制的作用。

访问控制符中的private,和public是最好理解的。

private:

1.在当前类开发中,main方法之外可以直接借助名字使用,当前类的main方法中可以使用对象打点的方式直接使用成员。

2.在当前类之外,使用对象(或是类名,针对静态的)打点调用都是被限制的。这时候有同学问,那我开发的这个私有的成员难道不能使用了吗?不是,可以通过在当前类中开发一个公有的方法,在公有方法中可以使用这个私有的成员,从而达到间接使用私有成员。

3.在继承中,私有成员禁止被继承,也就是说在子类的开发中,拒绝直接使用私有成员的名字进行使用。

public:

1.在当前类开发中,main方法之外可以直接借助名字使用,当前类的main方法中可以使用对象打点的方式直接使用成员。

2.在当前类之外,使用对象(或是类名,针对静态的)打点调用是被允许的。

3.在子类中,公有成员允许被继承,也就是说在子类的开发中,可以直接使用公有成员的名字进行使用。

protected:

protected这个修饰符比较繁琐,它涉及到是否是同一个包的问题。

同一个包的情况:

1.在当前类开发中,main方法之外可以直接借助名字使用,当前类的main方法中可以使用对象打点的方式直接使用成员。

2.在当前类之外,同一个包中,使用对象(或是类名,针对静态的)打点调用是被允许的。

3.在子类中,同一个包中,受保护成员允许被继承,也就是说在子类的开发中,可以直接使用受保护成员的名字进行使用。子类的main方法中可以使用子类或是父类对象打点调用。

4.在当前类之外,子类之外,要使用子类的类中,同一个包中,可以使用子类或是父类对象打点调用。

不同包的情况:

1.在当前类之外,不同包中,使用对象(或是类名,针对静态的)打点调用是被禁止的。

2.在子类中,不同包中,受保护成员允许被继承,也就是说在子类的开发中,可以直接使用受保护成员的名字进行使用。子类的main方法中只能通过子类对象打点调用。父类对象不行,这个时候相当于父类中的受保护成员跨包了。

3.在当前类之外,子类之外,要使用子类的类中,与子类同一个包中,通过子类对象打点是调用不出父类中的受保护的成员的。父类对象更不行,这个时候相当于父类中的受保护成员跨包了。如果想要通过子类对象调用父类的受保护的成员,需要重新覆写父类的这个成员。

4.在当前类之外,子类之外,要使用子类的类中,与父类同一个包中,通过子类对象打点是可以调用父类中的受保护的成员的。父类对象也行,同个包中。

5.在与父类和子类都不同包的第三个包中,要想通过子类对象调用父类的受保护成员,可以通过覆写父类受保护成员,并将访问限制符修改成public。

在实际的开发中也许很少用到protected来作访问控制,但是java的这个修饰符设计很巧妙,思想很高。同包中可以看做是public,异包中可以看做private。讲一个实际的列子。clone()方法。

如果自定义的类,需要提供clone这个方法,实现对象副本的制作。那么需要重新覆写clone这个方法,clone这个方法在Object类中作为受保护成员被提供,且在Java中所有的类都是继承自Object的。有如下关系:

Object类处在java.lang包,

我们自定义的类,大多不在java.lang包中

而我们很有可能在另外的第三个包中调用自定义类的clone方法。

所以有如下开发方法:

在自定义类中覆写clone方法,并将方法改成public来修饰。

总结如下:

在这里插入图片描述

出处:https://www.cnblogs.com/bandaobudaoweng/p/10804370.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java中的访问修饰符详解 的相关文章

  • 使用 JPA/ORM 生成数据库模式是一个坏主意吗?

    Salve Part of 另一个问题 答案 https stackoverflow com questions 7595578关于 SO 以及其他声称相同的声明 如果您通过 JPA 更新数据库架构 但通常不是一个好的做法 您是否真的不应该
  • Grizzly 和 Servlet 容器上下文

    我试图在我编写的 在 Grizzly 上运行的 Servlet 中获取一些注入的上下文 例如 Session 或 HttpServletRequest 但我所做的似乎都不起作用 整个过程似乎过早地停止了 并出现以下错误 SEVERE Mis
  • 检索和设置 IntelliJ IDEA 插件开发的拆分窗口设置

    我正在编写一个 IntelliJ IDEA 插件 用于保存打开选项卡的会话 称为选项卡会话 https github com alp82 idea tabsession 这个问题是后续问题IntelliJ IDEA 插件开发 保存选项卡组
  • 在 Eclipse 中跨文件搜索注释掉的代码

    有没有一种快速方法可以在 Eclipse 中查找 Java 文件中所有注释掉的代码 也许是搜索中的任何选项 或者任何可以执行此操作的附加组件 它应该只能找到被注释掉的代码 而不是普通的注释 在 Eclipse 中 我只是在打开正则表达式复选
  • 使用 Hibernate 或 Spring 打印 DBMS_OUTPUT.put_line

    我想知道 Hibernate 或 Spring 或任何第 3 方库是否提供将 DBMS OUTPUT put line 消息直接打印到 system out 或日志文件的能力 目的是在控制台中同时显示 PLSQL 日志消息和 java 日志
  • 如何在 Java 中根据 XSD 1.1 验证 XML?

    在 Java 中根据 XML Schema 1 1 验证 XML 文件的最佳方法是什么 我从中获取了代码tutorial http www ibm com developerworks xml library x javaxmlvalida
  • 如何限制用户键入时 JTextPane 中的字符数 (Java)

    我需要不允许在输入 X 后输入任何字符 我需要在输入 X 个字符后发出蜂鸣声 我知道如何在用户按 Enter 键后执行此操作 但我需要在用户按 Enter 键之前执行此操作 我从 Oracle 站点找到的方法是将 DocumentSizeF
  • 为什么不能将 String 添加到 List 类型?

    错误 The method add capture 1 of in the type List
  • java“类文件包含错误的类”错误

    我正在尝试制作一个控制台应用程序来测试我的网络服务 我成功部署了一个网络服务http localhost 8080 WS myWS http localhost 8080 WS myWS我用 wsimport 制作了代理类 wsimport
  • Tomcat JDBC 池中没有足够的空闲连接

    给定以下 Tomcat JDBC 连接设置
  • AIX:IBM Java:java.net.SocketException:连接超时:可能是由于地址无效

    当尝试与我们的服务器建立 SSL 连接时 我们在 IBM AIX 上经常看到以下异常 java net SocketException Socket closed at com sun net ssl internal ssl SSLSoc
  • 创建一个 int 类型的随机数组。爪哇

    我需要创建一个随机的 int 数组 并按我自己的类对其进行排序 这是我制作数组的地方 public class MyProgram9 public static void main String args int list new int
  • jsf 中的类型未找到属性

    我正在尝试调用 jsf 中使用 primefaces 的属性 但我有错误 500 在托管bean PersonelBean 类型上找不到 我正在使用 hibernate jsf 和 spring PersonelBean java Mana
  • 这个finally子句包含close()调用的原因是什么

    我正在学习在线java课程 使用 Java 编程简介 http math hws edu javanotes index html 在 I O 章节中 引入了以下代码 顺便说一下 在本程序的末尾 您将发现我们第一个有用的 try 语句中的
  • 在Java程序中计算zip文件的md5哈希值

    我有一个 zip 文件 在我的 Java 代码中我想计算 zip 文件的 md5 哈希值 有没有我可以用于此目的的 java 库 一些例子将非常感激 谢谢 几周前我通过这篇文章做到了这一点 http www javalobby org ja
  • Java 8 Stream - 为什么过滤器方法不执行? [复制]

    这个问题在这里已经有答案了 我正在学习使用java流进行过滤 但是过滤后的流没有打印任何内容 我认为过滤器方法没有被执行 我的过滤代码如下 Stream of d2 a2 b1 b3 c filter s gt s startsWith b
  • Jar Manifest 文件的使用混乱

    我正在阅读使用 jar 工具打包 java 应用程序 我注意到 META INF 目录下创建了一个清单文件 对于一个简单的应用程序来说 感觉它没有任何作用 我在 stackoverflow 上搜索以了解 Manifest 文件的用法 我碰到
  • 如何检测java控制台中而不是GUI中的箭头键? [复制]

    这个问题在这里已经有答案了 我正在编写一个应用程序 我需要检测其中的箭头键 C 有getch 函数 我们想要获取输入 然后添加对 ASCII 值的检查 我们如何检测输入箭头键 谢谢 我写了一个Java类原始控制台输入 http www so
  • 使用 Tomcat 和 gradle 进行休眠

    免责声明 我是 Java 新手 我正在尝试使用 Tomcat 和 Gradle 设置 Hibernate 构建运行正确 但看起来像persistence xml文件未被读取 我的项目结构如下 build gradle src main ja
  • Admob - 没有广告可显示

    你好 我尝试制作一些在 Android 手机上显示广告的示例程序 并尝试在 v2 2 的模拟器上测试它 代码中的一切似乎都很好 但调试器中的 AdListener 表示 响应消息为零或空 onFailedToReceiveAd 没有广告可显

随机推荐

  • 不能安装 64 位版本的 Microsoft Access 2010 数据库引擎,因为您当前已安装 32 位的 Office 产品一例问题的解决

    这个以前遇到过 那次处理的时候是在卸载程序中卸载 Microsoft Office Access database engine 2007 来解决的 但这次 我打开卸载程序界面 找不到office 2007 看到一个有关office 200
  • 有赞前端SP毁约后的日子

    22届双非本 22年3月底前端sp被有赞毁约 5月底重新找到工作 6月底入职 前言 本人不想读研 考公 只想工作 而且想着全国这么多公司 总能找到工作吧 大不了降低要求 山雨欲来风满楼 自从21年11月份拿了offer后 我就开始摆烂了 准
  • Django基础入门⑪:DjangoDjango数据表关联(一对一,一对多,多对多关系)

    Django基础入门 DjangoDjango数据表关联 Django数据表关联 一对一关系类型 语法格式 实例应用 一对多关系类型 必填参数 可选参数 语法格式 实例应用 多对多关系 ManyToManyFiled定义 可选参数 语法格式
  • 西门子1200连接安川伺服的心得

    安川伺服通信注意点 安川的伺服驱动器只支持安川控制系统的通讯协议MECHATROLINK II 和其他厂家的PLC搭配使用目前采用的方式只能是通过脉冲序列来控制 读取绝对值编码器数值方式可以采取自由口通信或高数计数器的方式 1 伺服电机中编
  • 常用的Vue生命周期函数

    Vue生命周期函数 组件挂载 组件更新 组件销毁时触发的一些方法 这些方法就叫做生命周期函数 beforeCreate console log 刚刚创建实例 created console log 实例创建完成 beforeMount co
  • eclipse开发工具技巧之打开内置浏览器

    前言 eclipse是非常强大的java开发工具 java是现在最流行 使用人数最多的语言 虽然现在idea很火 但很多中小公司还是以eclipse为主 用它应付绝大多数项目是没有任何问题 我也建议新手用eclipse入门 因为它确实很简单
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • Cisco交换机配置VTP

    文章目录 1 拓扑图 2 任务描述 3 Sw1配置 4 Sw2配置 5 Sw3配置 6 测试 1 拓扑图 2 任务描述 在 SW1 SW2 和 SW3 上配置 VTP 版本2 Sw1为服务器 Sw2 Sw3为客户端 使用java csdn做
  • Java接口默认实现、接口和抽象类区别

    Java8新特性 Java8接口可添加默认实现 接口和抽象类的区别 设计模式 缺省适配模式 Java8接口可添加默认实现 java8新增了接口默认实现功能 每个接口可以有默认实现 实现类可以根据其需要进行定制化得实现 抽象方法前面添加def
  • 复旦邱锡鹏:深度剖析 ChatGPT 类大语言模型的关键技术

    内容来源 ChatGPT 及大模型专题研讨会 分享嘉宾 复旦大教授 邱锡鹏 分享主题 对话式大型语言模型 转载自CSDN稿件 ChapGPT 自问世以来 便展现出了令世人惊艳的对话能力 仅用两个月时间 ChatGPT 月活跃用户就达一亿 是
  • 网课教程(1) 前言

    什么是脚本 脚本 Script 是使用一种特定的描述性语言 依据一定的格式编写的可执行文件 脚本语言又被称为扩建的语言 或者动态语言 是一种编程语言 用来控制软件应用程序 脚本通常是以文本 ASC 保存 只是在被调用时进行解释或者编译 我们
  • CRM系统基本的模板示例

    CRM SSM总结 1 步骤 1 1 创建WEB项目 1 2 导入JAR lib下 包以及静态资源 css fonts js jsp 2 数据库 CREATE DATABASE crm ssm 客户来源 电话营销 网络营销 推广活动 促销活
  • 模式识别原理(Pattern Recognition)、概念、系统、特征选择和特征

    1 1 模式识别的基本概念 一 广义定义 1 模式 一个客观事物的描述 一个可用来仿效的完善的例子 2 模式识别 按哲学的定义是一个 外部信息到达感觉器官 并被转换成有意义的感觉经验 的过程 例 识别热水 字迹等 二 狭义的定义 1 模式
  • ML-数据分析模板

    文章目录 机器学习 数据分析模板 Objective Data Set Information Attribute Information INPUT 单特征与缺失值展示 Feature Cleaning Engineering 标签转换
  • Window10与Linux虚拟机实现文件传输

    前言介绍 对于许多需要使用Linux虚拟机的小伙伴来说 如何实现虚拟机和主机间的文件传输是一个问题 尤其是有些文件虚拟机下载不太方便 这时文件共享就比较重要了 当然 虚拟平台的软件提供商也有着一些解决方案 如VM下的Tools工具或者VB下
  • 5种Python雪花飘落代码(建议收藏)

    前言 本文章向大家介绍用 Python 实现雪花飘落效果 运行以下代码 你将会看到一个美丽的雪花效果 你可以根据自己的需求 调整代码中的参数值以及其他细节 第一种 普通雪花代码 import turtle import random def
  • sqrt函数

    sqrt 函数的用法 求三角形面积 今天刷题的时候看到了三角形面积 突然想到老师上课讲过 这不是好简单 就直接上代码 include
  • Faster R-CNN算法

    Faster R CNN算法是作者Ross Girshick对Fast R CNN算法的一种改进 Fast R CNN在速度和精度上都有了不错的结果 但仍有一些不足之处 Faster R CNN算法同样使用VGG 16网络结构 检测速度在G
  • 联想笔记本声音太小怎么办_电脑音量调到最大了还是声音太小,怎么办啊??...

    展开全部 准备一台电脑 计算机需e68a843231313335323631343130323136353331333433643633要安装驱动程序向导 或备份声卡驱动程序或驱动程序光盘 以下步骤是win7操作界面截图演示 1 首先 点击
  • java中的访问修饰符详解

    主要讲述一下java中protected的修饰控制范围 在叙述protected修饰符使用之前 先来说一下java 可以发现 开发java程序是一个时时刻刻都在编写类 开发类 定义类的过程 类里面可以有main方法 main方法不管存在那个