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

        // 访问和修改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.mfbz.cn/a/728793.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于CST的PCB通孔三维建模实例

CST的Via Wizard流程在其Help文件中的描述如下,流程将经历5个创建模块,最后生成三维模型: 首先,创建一个新的MWS工程文件,在主菜单栏中逐一点击Macros-->Wizard-->Via Wizard,启动创建流程; CST会自动打开基于Excel的创建表格,如下图所示,设计者需要点击“启用宏…

【初阶数据结构】深入解析带头双向循环链表:探索底层逻辑

🔥引言 本篇将介绍带头双向循环链表底层实现以及在实现中需要注意的事项,帮助各位在使用过程中根据底层实现考虑到效率上问题和使用时可能会导致的错误使用 🌈个人主页:是店小二呀 🌈C语言笔记专栏:C语言笔…

加密的记事本app哪个好用 记事本哪款好用能上锁

随着科技的进步,越来越多的人开始倾向于使用记事本app来记录生活中的点点滴滴。相较于传统的纸质记事本,这些app不仅记录内容丰富,而且安全性更高。其中,敬业签就是一款备受好评的记事本软件。 敬业签以其强大的功能和出色的安全…

HTTP详细总结

概念 HyperText Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。 特点 基于TCP协议: 面向连接,安全 TCP是一种面向连接的(建立连接之前是需要经过三次握手)、可靠的、基于字节流的传输层通信协议,在…

“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) 概述 关…

高考志愿填报,如何避免报错专业?

高考志愿填报绝对是关键一环节,分数高低暂且不论,因为这个填报志愿,大概率是决定了余生的职业,也有人说,大学可以转专业,毕业还可以跨行就业,工作了还可以转行.....确实有这个可能性&#xff0c…

如何选择合适的半桥栅极驱动芯片?KP8530X,KP85402,KP85211A满足你对半桥栅极驱动一切需求

半桥栅极驱动系列KP8530X,KP85402,KP85211A在功率电子领域展现出卓越的性能和可靠的品质。具备诸多显著优势。首先,半桥栅极驱动系列KP8530X,KP85402,KP85211A拥有出色的耐压性能,可承受高达数百伏的电压&a…

CTFHUB-SSRF-端口扫描

已经提示我们需要扫描8000~9000的端口 ?urlhttp://127.0.0.1:8000/flag.php 访问用burp抓包爆破 通过Burp扫描8000-9000端口开放的web服务,发现8718开放web服务

【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:初步了解 二叉搜索树 🌹🌹期待您的关注 🌹🌹 ❀map与set 📒1.…

【深度学习】GPT-2,Language Models are Unsupervised Multitask Learners,【语言建模】

论文:https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf 文章目录 摘要引言方法2.1 训练数据集2.2 输入表示2.3 模型3. 实验3.1 语言建模3.2 Children’s Book Test3.3 LAMBADA3.4 Winograd Sc…

微信小程序轮播图

效果图 详情可见 微信小程序 参照&#xff1a;swiper | uni-app官网 代码&#xff1a; <!--轮播图-- > <swiper interval"2000" autoplay"true" circular"true" style"height: 300px;"><swiper-item style&qu…

YOLOv10改进 | 注意力篇 | YOLOv10引入YOLO-Face提出的SEAM注意力机制优化物体遮挡检测

1. SEAM介绍 1.1 摘要:近年来,基于深度学习的人脸检测算法取得了长足的进步。 这些算法通常可以分为两类,即像 Faster R-CNN 这样的两级检测器和像 YOLO 这样的一级检测器。 由于精度和速度之间具有更好的平衡,一级探测器已广泛应用于许多应用中。 在本文中,我们提出了一…

Emacs之复制时:禁止转换成tab符号(一百三十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

详细分析Oracle日期和时间的基本命令

目录 1. 基本类型2. 常用函数3. Demo 1. 基本类型 Oracle支持不同的日期格式模型&#xff0c;其中包括&#xff1a; ISO 8601: YYYY-MM-DDTHH:MI:SS&#xff0c;例如2024-06-20T14:30:00Oracle内部格式: DD-MON-YYYY HH:MI:SS AM&#xff0c;例如20-JUN-2024 02:30:00 PM DA…

Linux管道与重定向

管道 是进程通信的方法之一&#xff0c;在Linux中用命令1|命令2的形式表示&#xff0c;将前一个命令的结果作为后续命令的参数进行输入&#xff0c;也有tee管道&#xff0c;可以进行多次筛选&#xff0c;即多次使用|过滤命令。 重定向 文件描述符FD Linux中输入输出分为三种…

VB实现加法计算

textbox1失去焦点&#xff0c;检查输入的值是否为数字。 textbox2中按下Enter键&#xff0c;检查输入的值是否为数字。 textbox3获得焦点&#xff0c;计算textbox1和textbox2的和。 Public Class Form1Private Sub TextBox1_LostFocus(sender As Object, e As EventArgs) Hand…

使用GPG来解密和加密文件详解

文章目录 使用私钥解密文件示例步骤 注意事项加密文件前提条件导入公钥加密文件输出加密文件示例步骤注意事项邮箱不是必须的情况1&#xff1a;有多个公钥情况2&#xff1a;只有一个公钥示例步骤示例1&#xff1a;指定公钥ID或邮箱地址示例2&#xff1a;密钥环中只有一个相关的…

【LLM之RAG】RAT论文阅读笔记

研究背景 近年来&#xff0c;大型语言模型&#xff08;LLMs&#xff09;在各种自然语言推理任务上取得了显著进展&#xff0c;尤其是在结合大规模模型和复杂提示策略&#xff08;如链式思维提示&#xff08;CoT&#xff09;&#xff09;时。然而&#xff0c;LLMs 在推理的事实…

MySQL:SELECT list is not in GROUP BY clause 报错 解决方案

一、前言 一大早上测试环境&#xff0c;发现测试环境的MySQL报错了。 SELECT list is not in GROUP BY clause and contains nonaggregated column二、解决方案 官方文档中提到&#xff1a; 大致意思&#xff1a; 用于GROUP BY的SQL / 92标准要求满足以下条件&#xff1a; SE…

VUE面试题汇总(九)

之间联系&#xff08;Model 和 ViewModel 的双向数据绑定&#xff09; 解析&#xff1a; MVVM 是 Model-View-ViewModel 的缩写。MVVM 是一种设计思想。Model 层代表数据模型&#xff0c;也可以在 Model 中定义数据修改和操作的业务逻辑&#xff1b;View 代表 UI 组件&#xf…