当前位置: 首页 > 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.卡片种类 传…...

终极指南:如何使用LeetDown轻松降级A6/A7苹果设备系统

终极指南:如何使用LeetDown轻松降级A6/A7苹果设备系统 【免费下载链接】LeetDown a GUI macOS Downgrade Tool for A6 and A7 iDevices 项目地址: https://gitcode.com/gh_mirrors/le/LeetDown LeetDown是一款专为macOS设计的图形化降级工具,能够…...

AI写教材大揭秘!低查重技巧让你的教材脱颖而出!

在编写教材时,依赖相关资料是必不可少的,但传统的资料整合方法已经无法满足现实需求。以往,我们需要从各种渠道,比如课标文件、学术研究以及教学案例中寻找所需的信息,这往往需要耗费数天的时间。即便信息搜集齐全&…...

保姆级教程:用SolidWorks和PCL把装配体转成PCD点云(附完整命令)

从SolidWorks装配体到PCL点云的完整转换指南 在工业设计、逆向工程和三维视觉处理领域,将CAD模型转换为点云数据是一个常见但容易出错的过程。许多工程师和研究人员在使用SolidWorks完成设计后,需要将装配体转换为点云格式(如PCD)…...

Surface硬盘不够用?教你用cfadisk把SD卡变本地硬盘(附详细图文)

Surface硬盘扩容实战:用cfadisk将SD卡完美变身本地存储 每次打开Surface的存储设置,看到那根触目惊心的红色容量条,相信不少用户都会感到焦虑。作为微软旗下最受欢迎的移动生产力工具,Surface系列在便携性和性能上表现出色&#x…...

终极MCP服务器指南:解锁AI智能决策的完整工具箱 [特殊字符]

终极MCP服务器指南:解锁AI智能决策的完整工具箱 🚀 【免费下载链接】servers Model Context Protocol Servers 项目地址: https://gitcode.com/GitHub_Trending/se/servers MCP服务器(Model Context Protocol Servers) 是现…...

WSABuilds社区活动:线上线下聚会与开发者大会参与指南

WSABuilds社区活动:线上线下聚会与开发者大会参与指南 【免费下载链接】WSABuilds Run Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/or Magisk or KernelSU (root sol…...

OpenClaw对接Qwen3-VL:30B:飞书智能助手配置

OpenClaw对接Qwen3-VL:30B:飞书智能助手配置 1. 为什么选择这个组合? 去年我在团队内部尝试搭建一个能处理图片和文本的智能助手时,遇到了三个痛点:一是商业API调用成本太高,二是数据安全性无法保证,三是…...

RWKV7-1.5B-g1a一文详解:轻量中文对话与文案续写实战

RWKV7-1.5B-g1a一文详解:轻量中文对话与文案续写实战 1. 模型简介 rwkv7-1.5B-g1a 是一款基于RWKV-7架构的多语言文本生成模型,特别适合中文场景下的轻量级应用。这个1.5B参数的模型在保持较小体积的同时,能够出色完成基础问答、文案续写、简…...

探索 Carsim 与 Simulink 联合实现三车队列 PID 控制

队列控制 carsim联合simulink pid控制 实现3辆车的队列控制,跟随头车车速变化,保合理车距。在自动驾驶和车辆动力学研究领域,实现多车队列控制,使其能跟随头车车速变化并保持合理车距,是一项极具挑战性但又十分关键的任…...

STM32F103C8T6 HAL库驱动HC-SR04:用输入捕获双通道模式,精准测距不翻车

STM32F103C8T6 HAL库双通道捕获HC-SR04:高精度测距的工程实践 在智能小车避障、工业液位检测等嵌入式应用中,超声波测距模块的稳定性直接决定系统可靠性。传统单通道捕获方案常因计数器溢出、中断响应延迟等问题导致测量误差,而双通道输入捕获…...