【面试干货】Java中的访问修饰符与访问级别

news2024/11/27 8:32:56

【面试干货】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();

        // 访问和修改publicVariable
        publicClassInstance.publicVariable = 10;
        System.out.println("publicVariable: " + publicClassInstance.publicVariable);

        // 调用publicMethod
        publicClassInstance.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 不是 public
        ClassInDifferentPackage 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💖点点关注,收藏不迷路💖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1845261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

blender 快捷键 常见问题

一、快捷键 平移视图:Shift 鼠标中键旋转视图:鼠标中键缩放视图:鼠标滚动框选放大模型:Shift B 二、常见问题 问题:导入模型成功,但是场景中看不到。 解决办法:视图-裁剪起点&#xff0…

“Docker入门指南:概念与安装详解“

目录 # 概念 1. Docker常见问题 2. docker概念和安装 2.1 Docker的组成 2.2 Docker 组件及关系表 2.3 docker核心思想 2.4 docker镜像与容器两个核心概念 2.5 容器概念图 2.6 docker核心技术 2.6.1 镜像 (Image) 概述 关系 示例 2.6.2 容器 (Container) 概述 关…

贪吃蛇——c语言版

文章目录 演示效果实现的基本功能技术要点源代码实现功能GameStart打印欢迎界面和功能介绍绘制地图创建蛇创建食物 GameRun打印提示信息蛇每走一步 GameEnd蛇死亡后继续游戏 演示效果 贪吃蛇1.0演示视频 将终端应用程序改为控制台主机 实现的基本功能 贪吃蛇地图绘制蛇吃食物的…

[Mysql] 数据库基本概念

前言---数据库系统发展史 当今主流数据库介绍 一、操作系统 Linux操作系统 :RedHat CentOS Debian Ubuntu OpenSUSE 信创标准 会让系统逐渐国产化 国产系统:华为 欧拉 阿里 龙蜥 腾讯 tencentOS 银河麒麟 中标麒麟…

分享:MoneyPrinterTurbo只需一个视频主题或关键词全自动生成一个高清的短视频

MoneyPrinterTurbo是基于原有的MoneyPrinter项目进行优化和重构后推出的新版本。它利用先进的AI技术,通过用户提供的视频主题或关键词,全自动生成视频文案、素材、字幕以及背景音乐,并最终合成高清的短视频。 功能特性 AI智能文案生成&…

redis高可用-主从同步

目录 一:背景 二:实现方式 三:实际使用 一:背景 上一节我们介绍了centos下redis下的安装配置,是在单台服务器部署一个redis服务,这种模式是单机模式下使用的,如果出现服务故障,re…

Spring AI 调用 openAI 进行语音识别

Spring AI支持语音识别功能,目前仅支持OpenAI的Transcription模型。 项目搭建: 参考 Spring AI 介绍以及与 Spring Boot 项目整合 源码示例: RestController RequestMapping("/openai") public class OpenAiIAudioTranscriptionC…

幂集000

题目链接 幂集 题目描述 注意点 集合中不包含重复的元素 解答思路 可以使用深度优先遍历的思想按顺序将相应的元素添加到子集中&#xff0c;并将每个子集添加到结果集 代码 class Solution {public List<List<Integer>> subsets(int[] nums) {List<List&…

VirtualBox虚拟机下安装Ubuntu24.04操作系统

目录 0 背景1 虚拟机的安装1.1 下载安装包1.2 走安装向导 2 操作系统的安装2.1 下载光盘镜像文件2.2 安装操作系统到虚拟机上 3 基本配置3.1 网络连接方式3.2 共享文件夹3.3 设置显存大小 0 背景 首先说说Ubuntu系统&#xff0c;或者更普遍一点&#xff0c;Linux系统究竟有什么…

Java项目学习(员工管理)

新增、员工列表、编辑员工整体代码流程与登录基本一致。 1、新增员工 RestController RequestMapping("/admin/employee")EmployeeController 类中使用了注解 RestController 用于构建 RESTful 风格的 API&#xff0c;其中每个方法的返回值会直接序列化为 JSON 或…

Mirillis Action v4 解锁版安装教程(专业高清屏幕录像软件)

前言 Mirillis Action!&#xff08;暗神屏幕录制软件&#xff09;专业高清屏幕录像软件&#xff0c;被誉为游戏视频三大神器之一。这款屏幕录制软件和游戏录制软件&#xff0c;拥有三大硬件加速技术&#xff0c;支持以超高清视频画质录制桌面和实况直播&#xff0c;超清视频画…

90 Realistic Arctic Environment Textures snow(90+种逼真的北极环境纹理--雪、冰及更多)

一组90多个逼真的雪、冰、雪地岩石和其他被雪覆盖的地面纹理,供在雪地环境中使用。每个纹理都是可贴的/无缝的,并且完全兼容各种不同的场景--标准的Unity地形、Unity标准着色器、URP、HDRP等等都兼容。 所有的纹理都是4096x4096,并包括一个HDRP掩码,以完全支持HDRP。 特点。…

揭示数据库内核的奥秘--手写数据库toadb开源项目

揭示数据库内核的奥秘–手写数据库toadb 数据为王的时代 在信息化时代&#xff0c;数据已成为企业和应用不可或缺的核心&#xff0c;而数据库不仅是数据的仓库&#xff0c;更是支撑业务决策、系统运行的基石。对于求职者而言&#xff0c;掌握数据库知识已成为求职市场上的必考…

基于若依的ruoyi-nbcio流程管理系统增加所有任务功能(二)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; h…

基于AT32_Work_Bench配置AT32工程

基于AT32_Work_Bench配置AT32工程 ✨AT32_Work_Bench工具是用来给AT32 MCU快速构建外设初始化工程软件&#xff0c;类似STM32的STM32CubeMX工具软件。 &#x1f4cd;AT32 TOOL系列工具下载地址&#xff1a;https://www.arterytek.com/cn/support/index.jsp?index4&#x1f3f7…

递归乘法00

题目链接 递归乘法 题目描述 注意点 保证乘法范围不会溢出 解答思路 使用加法代替乘法&#xff0c;递归计算A * B&#xff0c;每个递归的过程加上一个A&#xff0c;且对B减1&#xff0c;直到B为0为止 代码 class Solution {public int multiply(int A, int B) {if (B 0…

初学51单片机之数字秒表

不同数据类型间的相互转换 在C语言中&#xff0c;不同数据类型之间是可以混合运算的。当表达式中的数据类型不一致时&#xff0c;首先转换为同一类型&#xff0c;然后再进行计算。C语言有两种方式实现类型转换。一是自动类型转换&#xff0c;另外一种是强制类型转换。 转换的主…

哈尔滨等保的定级备案

哈尔滨等保的定级备案是确保信息安全&#xff0c;保障国家和人民利益的重要措施。在当前信息化社会&#xff0c;信息安全已成为国家发展的重要支撑&#xff0c;哈尔滨等保的定级备案工作显得尤为关键。本文将从哈尔滨等保定级备案的背景、定级标准、备案流程、实施意义等方面进…

ubuntu安装qtcreator与环境配置

sudo apt-get update sudo apt-get install gcc g # 两个编译器 sudo apt-get install build-essential # 编译c/c所需要的软件包 sudo apt-get install libgl1-mesa-dev # 安装mesa&#xff0c;Mesa 实际上是一个库&#xff0c;它实现了多种图形 API 规范 sudo apt-get insta…

快排(前后指针实现)

前言 快排解决办法有很多种&#xff0c;这里我再拿出来一种前后指针版本 虽然这个版本的时间复杂度和霍尔一样&#xff0c;逻辑也差不多&#xff0c;但是实际排序过程&#xff0c;确实会比霍尔慢一点 快排gif 快排前后指针实现逻辑&#xff1a; 前后指针实现逻辑(升序):单趟排序…