当前位置: 首页 > news >正文

【面试干货】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) 团队之间协作的实践和原则。目标是使用自动化来简化开发生命周期,从规划和开发到部署和…...

资质申请表详解:填写《建筑幕墙工程设计专项资质申请表》的要点

填写《建筑幕墙工程设计专项资质申请表》的要点如下,按照清晰、分点表示和归纳的方式整理,并参考了文章中的相关数字和信息: 一、封面 申报企业名称:按照工商营业执照内容填写全称,并加盖企业公章。填报日期&#xf…...

华为手机怎么找回删除的照片?掌握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.卡片种类 传…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...