【面试干货】Java中的访问修饰符与访问级别
【面试干货】Java中的访问修饰符与访问级别
- 1、public
- 2、protected
- 3、默认(没有访问修饰符)
- 4、private
| 💖The Begin💖点点关注,收藏不迷路💖 |
在Java中,访问修饰符用于控制类、变量、方法和构造器的访问级别。Java提供了四种访问修饰符:public、protected、默认(没有访问修饰符)和private。每种修饰符都定义了不同的访问级别。
1、public
1、public是访问级别最高的修饰符。
2、使用public修饰的类、变量、方法或构造器可以被任何其他类访问。
3、public类可以在任何包中被访问。
示例:
// PublicClass.java
public class PublicClass {// 一个公共成员变量public int publicVariable;// 一个公共方法public void publicMethod() {System.out.println("这是一个公共方法。");}
}// MainClass.java
public class MainClass {public static void main(String[] args) {// 创建PublicClass的实例PublicClass publicClassInstance = new PublicClass();// 访问和修改publicVariablepublicClassInstance.publicVariable = 10;System.out.println("publicVariable: " + publicClassInstance.publicVariable);// 调用publicMethodpublicClassInstance.publicMethod();}
}

2、protected
1、protected修饰符表示成员对同一包中的其他类是可访问的,对其他包中的子类也是可访问的。
2、protected成员不能被与声明它的类无关的其他包中的类访问。
示例:
// ProtectedClass.java
package mypackage;public class ProtectedClass { protected int protectedVariable = 42; // 受保护变量protected void protectedMethod() { // 受保护方法System.out.println("调用了受保护的方法。");}
}// OtherClassInSamePackage.java
package mypackage;class OtherClassInSamePackage extends ProtectedClass { void accessProtectedMember() { // 在同一包中访问受保护成员System.out.println("受保护变量的值:" + protectedVariable); // 可访问 protectedMethod(); // 可访问 }public static void main(String[] args) {OtherClassInSamePackage obj = new OtherClassInSamePackage();obj.accessProtectedMember();}
}// SubclassOfProtectedClass.java
package mypackage;import mypackage.ProtectedClass;public class SubclassOfProtectedClass extends ProtectedClass { void accessProtectedMember() { // 在不同包中的子类中访问受保护成员System.out.println("受保护变量的值:" + protectedVariable); // 可访问 protectedMethod(); // 可访问 }public static void main(String[] args) {SubclassOfProtectedClass obj = new SubclassOfProtectedClass();obj.accessProtectedMember();}
}

3、默认(没有访问修饰符)
1、如果一个类、变量、方法或构造器没有使用访问修饰符,则它默认为包级私有。
2、默认访问级别的成员只能被定义它的类所在的包中的其他类访问。
示例:
首先,创建一个包 mypackage,其中包含 DefaultClass 和 OtherClassInSamePackage:
// 文件路径: mypackage/DefaultClass.java
package mypackage;class DefaultClass {int defaultVariable = 42; // 默认访问级别void defaultMethod() {System.out.println("调用了默认方法。");}
}// 文件路径: mypackage/OtherClassInSamePackage.java
package mypackage;class OtherClassInSamePackage {void accessDefaultMember(DefaultClass obj) {System.out.println("默认成员变量的值:" + obj.defaultVariable); // 可访问obj.defaultMethod(); // 可访问}public static void main(String[] args) {DefaultClass obj = new DefaultClass();OtherClassInSamePackage other = new OtherClassInSamePackage();other.accessDefaultMember(obj);}
}
接下来,创建另一个包 anotherPackage,其中包含 ClassInDifferentPackage:
// 文件路径: anotherPackage/ClassInDifferentPackage.java
package anotherPackage;import mypackage.DefaultClass;public class ClassInDifferentPackage {void cannotAccessDefaultMember(DefaultClass obj) {// 下面的语句不能访问默认成员,因此被注释掉// System.out.println(obj.defaultVariable); // 不可访问// obj.defaultMethod(); // 不可访问System.out.println("无法访问默认成员变量和方法,因为它们在不同的包中。");}public static void main(String[] args) {// 这里只是为了展示无法访问的情况,没有实际调用DefaultClass obj = new DefaultClass(); // 这行会报错,因为 DefaultClass 不是 publicClassInDifferentPackage other = new ClassInDifferentPackage();other.cannotAccessDefaultMember(obj);}
}

4、private
1、private是访问级别最低的修饰符。
2、使用private修饰的变量、方法或构造器只能被声明它的类本身访问。
3、同一个类中的其他成员、子类或任何其他类都不能访问private成员。
示例:
// 文件路径: mypackage/PrivateClass.java
public class PrivateClass { private int privateVariable = 10; // 私有成员变量private void privateMethod() { System.out.println("调用了私有方法。"); // 私有方法内部逻辑} public void accessPrivateMember() { System.out.println("私有成员变量的值:" + privateVariable); // 可访问(因为是类内部)privateMethod(); // 可访问(因为是类内部)}
} // 文件路径: mypackage/OtherClass.java
class OtherClass { void cannotAccessPrivateMember(PrivateClass obj) { // 以下两行语句试图访问私有成员,将导致编译错误,因此被注释掉// System.out.println(obj.privateVariable); // 不可访问// obj.privateMethod(); // 不可访问System.out.println("无法访问私有成员变量和方法,因为它们是私有的。");} public static void main(String[] args) {PrivateClass privateObj = new PrivateClass();privateObj.accessPrivateMember(); // 调用公共方法来访问私有成员OtherClass otherObj = new OtherClass();otherObj.cannotAccessPrivateMember(privateObj); // 无法直接访问私有成员}
}


| 💖The End💖点点关注,收藏不迷路💖 |
相关文章:
【面试干货】Java中的访问修饰符与访问级别
【面试干货】Java中的访问修饰符与访问级别 1、public2、protected3、默认(没有访问修饰符)4、private 💖The Begin💖点点关注,收藏不迷路💖 在Java中,访问修饰符用于控制类、变量、方法和构造器…...
Oracle最终还是杀死了MySQL
起因 大约15年前,Oracle收购了Sun公司,从而也拥有了MySQL,互联网上关于Oracle何时会“扼杀MySQL”的讨论此起彼伏。 当时流传着各种理论:从彻底扼杀 MySQL 以减少对 Oracle 专有数据库的竞争,到干掉 MySQL 开源项目&…...
【Python的随机数汇总】
我们写python代码的时候,很少能用得上随机数,但是随机数有很多妙用。例如,在我们做测试数据集的时候,可以构建一个随机的dataframe; 或者在保存数据的时候,可以在每条数据前插入一列作为,不重…...
[状态压缩 广搜BFS]Saving Tang Monk
描述 《Journey to the West》(also 《Monkey》) is one of the Four Great Classical Novels of Chinese literature. It was written by Wu Chengen during the Ming Dynasty. In this novel, Monkey King Sun Wukong, pig Zhu Bajie and Sha Wujing, escorted Tang Monk to…...
Flutter 实现软鼠标
文章目录 前言一、如何实现?1、记录鼠标偏移2、MouseRegion获取偏移3、Transform移动图标 二、完整代码三、使用示例总结 前言 flutter在嵌入式系统中运行时,有可能遇到drm鼠标无法使用的情况,但鼠标事件却可以正常接收,此时如果…...
使用 MLRun 和 MinIO 设置开发机器
MLOps 之于机器学习,就像 DevOps 之于传统软件开发一样。两者都是一组旨在改善工程团队(开发或 ML)和 IT 运营 (Ops) 团队之间协作的实践和原则。目标是使用自动化来简化开发生命周期,从规划和开发到部署和…...
资质申请表详解:填写《建筑幕墙工程设计专项资质申请表》的要点
填写《建筑幕墙工程设计专项资质申请表》的要点如下,按照清晰、分点表示和归纳的方式整理,并参考了文章中的相关数字和信息: 一、封面 申报企业名称:按照工商营业执照内容填写全称,并加盖企业公章。填报日期…...
华为手机怎么找回删除的照片?掌握3个方法,恢复不是梦
由于误删、设备故障、软件更新等原因,我们有时可能会不慎丢失这些宝贵的照片。当面对空空如也的相册时,那种失落感无法言喻。华为手机该怎么找回删除的照片呢?但是,请不要绝望!在科技的帮助下,我们可以采取…...
数据结构试题 20-21
真需要就死记吧 二叉树遍历-先序(非递归)【图解代码】_哔哩哔哩_bilibili 解释一下步骤: 一个循环为: 1.取节点 2.放右子树 3.放左子树 每次循环,都要从栈里取出一个节点 先放右子树,再放左子树 那这道题就是,先放1&am…...
vscode插件开发之 - TestController
TesController概要介绍 TestController 组件是用于实现自定义测试框架和集成测试结果的。它允许开发者定义自己的测试运行器,以支持在VSCode中运行和展示测试。以下是一些使用 TestController 组件的主要场景: 自定义测试框架:如果你正在开发…...
QBitArray使用详解
QBitArray使用详解 一、创建和初始化 QBitArray1.1 QBitArray默认构造1.2 QBitArray指定大小的构造1.3 QBitArray指定大小和初始值的构造 二、设置和访问位2.1 QBitArray设置单个位2.2 QBitArray访问单个位2.3 QBitArray使用下标操作符 三、设置所有位3.1 QBitArray将所有位设置…...
基于Python的自然语言处理项目 ChatTTS 推荐
**项目名称:ChatTTS** ChatTTS是一个基于Python的自然语言处理项目,旨在实现一个简单的文本到语音转换系统。它使用深度学习技术,通过自然语言处理和语音合成算法,将文本转换为语音输出。 **项目介绍**: Chat…...
论 To B 产品:从概念到市场实践
本文作者为 360 奇舞团产品经理 论 To B 产品:从概念到市场实践 To B 产品在商业世界中扮演着至关重要的角色。相较于面向消费者的To C市场,To B市场更专注于为其他企业提供产品和服务。理解和成功运营To B产品需要对其特定的市场需求和运作方式有深刻的…...
如何通过自定义模块DIY出专属个性化的CSDN主页?一招教你搞定!
个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 💯如何通过HTMLCSS自定义模板diy出自己的个性化csdn主页&#x…...
[BSidesCF 2020]Had a bad day1
看到页面有两个按钮 先随便点一个试一下,当我们点击之后发现url是有变动的 感觉url是有点东西的,可能是某种注入,先尝试一下sql注入,发现给出了报错 通过报错我们可以确定是文件包含漏洞,那我们试试php伪协议去读取一下…...
从媒体网站的频道划分看媒体邀约的分类?
传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体宣传加速季,100万补贴享不停,一手媒体资源,全国100城线下落地执行。详情请联系胡老师。 在我们举行活动的时候,通常会邀请媒体到现场来…...
Day40
Day40 监听器 概念: 监听器用于监听web应用中某些对象信息的创建、销毁、增加,修改,删除等动作的 发生,然后作出相应的响应处理。当范围对象的状态发生变化的时候,服务器自动调用 监听器对象中的方法。 常用于统计在线…...
linux基础 - 内核的基础概念
目录 零. 前言 一. 源码简介 二. 存储管理 物理内存管理: 虚拟内存管理: 内存分配与回收: 三. CPU 和进程管理 进程管理: CPU 管理: 四. 文件系统 文件系统的概念 常见的 Linux 文件系统类型 文件系统的工…...
centos7系统使用docker-compose安装部署jenkins
CentOS7系统使用docker-compose安装部署jenkins,并实现前后端自动构建 记录一次工作中部署jenkins的真实经历,总结了相关经验 1.准备环境 1.java 由于最新的jenkins需要jdk11以上才能支持,而系统里的jdk是1.8的,因此等jenkins安…...
传染病报卡内容——丙型
--丙型 select a.morbiditdate 发病日期, diagnosedate 诊断日期, a.deathdate 死亡日期, a.casetypequality 病例分类,a.hcvrna "HCR_RNA定量" from zl_sdmb.t_报卡记录 t, c1_infectiousv1_6 a where t.id a.fileid and t.卡片种类 传…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
