Java访问修饰符的区别

news2024/12/24 21:01:01

public:公开的,任何地方都可以访问。
protected:受保护的,同一个包中的类和所有子类(可跨包)可以访问。
private:私有的,只有在同一个类中可以访问。
默认(无修饰符):包级私有(package-private),只有在同一个包中可以访问。

    文件名和 public 类名必须匹配:
    一个 .java 文件中可以有多个类,但最多只能有一个 public 类。
    如果某个类被声明为 public,那么文件名必须与这个类的名字完全一致(区分大小写),并且文件扩展名是 .java。

    包声明:
    通常,Java 类会被放置在包(package)中。包声明应该在文件的第一行(在任何导入语句之前)。

    类的可见性:
    如果一个类没有被声明为 public,那么它的可见性是包级私有的(package-private),这意味着它只能在同一个包中访问。

光看文字我感觉啥用没有,下面给出实例代码来说明。


目录结构:
在这里插入图片描述

day00_访问修饰符.java
给出四中访问修饰符类型的方法

package study;

public class day00_访问修饰符 {
    public void publicMethod() {
        System.out.println("Public method in PublicClass");
    }

    protected void protectedMethod() {
        System.out.println("Protected method in PublicClass");
    }

    void packagePrivateMethod() {
        System.out.println("Package-private method in PublicClass");
    }

    private void privateMethod() {
        System.out.println("Private method in PublicClass");
    }
}

day00_访问修饰符_同一个包内.java
很明显,私有方法无法在不同类被访问。

package study;

public class day00_访问修饰符_同一个包内 {
    public void accessMethods() {
        day00_访问修饰符 publicClass = new day00_访问修饰符();
        publicClass.publicMethod();         // 可以访问
        publicClass.protectedMethod();      // 可以访问
        publicClass.packagePrivateMethod(); // 可以访问
//         publicClass.privateMethod();     // 不能访问
    }
}

day00_访问修饰符_不同包内.java
我感觉这里就是核心了,可以发现在不同包下,只要继承了不同包下的类,就可以访问它的protected类型方法,即使不在同一个包下。
但是默认的不加显示修饰符的包级私有(package-private)方法,就算你继承了,是它的子类,但是父类和子类不同同一个包下,那就是无法访问包级私有(package-private)方法。

package study_实验访问修饰符;

import study.day00_访问修饰符;

public class day00_访问修饰符_不同包内 extends day00_访问修饰符
{
    public void accessProtectedMethod() {
        publicMethod();        // 可以访问,因为是 public
        protectedMethod();     // 可以访问,因为是子类
        // packagePrivateMethod(); // 不能访问,因为不同包
        // privateMethod();     // 不能访问,私有方法
    }
}

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

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

相关文章

[Go 微服务] go-micro + consul 的使用

文章目录 1.go-micro 介绍2.go-micro 的主要功能3.go-micro 安装4.go-micro 的使用4.1 创建服务端4.2 配置服务端 consul4.3 生成客户端 5.goodsinfo 服务5.1 服务端开发5.2 客户端开发 1.go-micro 介绍 Go Micro是一个简化分布式开发 的微服务生态系统,该系统为开…

stm32学习笔记---ADC模数转换器(理论部分)

目录 ADC简介 什么叫逐次逼近型? STM32 ADC框图 模数转换器外围线路 ADC基本结构图 输入通道 规则组的四种转换模式 第一种:单次转换非扫描模式 第二种:连续转换,非扫描模式 第三种:单次转换,扫描…

数据结构03 链表的基本操作【C++数组模拟实现】

前言:本节内容主要了解链表的基本概念及特点,以及能够通过数组模拟学会链表的几种基本操作,下一节我们将通过STL模板完成链表操作,可以通过专栏进入查看下一节哦~ 目录 单链表及其特点 完整链表构成 完整链表简述 创建单链表 …

MySQL自增主键踩坑记录

对于MySQL的自增主键,本文记录、整理下在工作中实际遇到的问题。 下面示例均基于MySQL 8.0 修改列的类型后,自增属性消失 CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL );上面的…

计算机监控软件有哪些?10款常年霸榜的计算机监控软件

计算机监控软件是企业管理和保护信息安全的重要工具,它们帮助企业管理者监督员工的计算机使用行为,确保工作效率、数据安全以及合规性。在众多监控软件中,有些产品因其卓越的功能、易用性、安全性以及持续获得的良好市场反馈而常年占据行业领…

什么是指令微调(LLM)

经过大规模数据预训练后的语言模型已经具备较强的模型能力,能够编码丰富的世界知识,但是由于预训练任务形式所限,这些模型更擅长于文本补全,并不适合直接解决具体的任务。 指令微调是相对“预训练”来讲的,预训练的时…

spring mvc实现一个自定义Formatter请求参数格式化

使用场景 在Spring Boot应用中,Formatter接口用于自定义数据的格式化,比如将日期对象格式化为字符串,或者将字符串解析回日期对象。这在处理HTTP请求和响应时特别有用,尤其是在展示给用户或从用户接收特定格式的数据时。下面通过…

集合,Collection接口

可动态保存任意多个对象,使用比较方便 提供了一系列方便操作对象的方法:add,remove,set,get等 使用集合添加删除新元素,代码简洁明了 单列集合 多列集合 Collection接口 常用方法 List list new Arra…

【原创图解 算法leetcode 146】实现一个LRU缓存淘汰策略策略的数据结构

1 概念 LRU是Least Recently Used的缩写,即最近最少使用,是一种常见的缓存淘汰算法。 其核心思想为:当内存达到上限时,淘汰最久未被访问的缓存。 2 LeetCode LeetCode: 146. LRU缓存 3 实现 通过上面LRU的淘汰策略可知&#…

北京市大兴区餐饮行业协会成立暨职业技能竞赛总结大会成功举办

2024年6月27日下午,北京市大兴区营商服务中心B1层报告厅迎来了北京市大兴区餐饮行业协会成立仪式暨2024年北京市大兴区餐饮行业职工职业技能竞赛总结大会。此次活动不仅标志着大兴区餐饮行业协会的正式成立,也对在2024年大兴区餐饮行业职工职业技能竞赛中…

Python自动化测试:web自动化测试——selenium API、unittest框架的使用

web自动化测试2 1. 设计用例的方法——selenium API1.1 基本元素定位1)定位单个唯一元素2)定位一组元素3)定位多窗口/多框架4)定位连续层级5)定位下拉框6)定位div框 1.2 基本操作1.3 等待1.4 浏览器操作1.5…

SpringBoot整合Quartz实现动态定时任务

目录 1、Quartz简介1.1 Quartz的三大核心组件1.2 CronTrigger配置格式 2、SpringBoot整合Quartz框架2.1 创建项目2.2 实现定时任务 1、Quartz简介 Quartz是一个开源的任务调度服务,它可以独立使用,也可与其它的Java EE,Java SE应用整合使用。…

Python数据分析案例48——二手房价格影响因素分析

案例背景 房价影响因素也是人们一直关注的问题,本次案例也适合各种学科的同学,无论你是经济管理类还是数学统计,还是电商物流类,都可以使用回归分析。通过数据分析回归分析分组聚合可视化等方法进行研究房价影响因素。 数据介绍 …

2024下半年必追国漫片单,谁将问鼎巅峰?

随着2024年上半年的落幕,国漫市场再度迎来了百花齐放的盛况。从经典续作到全新IP,从玄幻到科幻,每一部作品都以其独特的魅力吸引着观众的目光。本期为大家盘点下半年值得一看的国漫佳作,大胆预测,谁将成为这场神仙打架…

Grafana-11.0.0 在线部署教程

Grafana-11.0.0 在线部署教程 环境: 操作系统: ubuntugrafana版本: 11.0.0 (建议不要按照最新版)grafana要求的系统配置不高,建议直接部署在监控服务器上,比如zabbix服务器、prometheus服务器…

【Stable Diffusion】创意与科技的完美结合:AI绘画副业让美术老师月入2w+

前言 艺术与科技一直以来都是两个看似独立的领域,但如今,随着人工智能的发展,这两个领域正迎来一次前所未有的融合。在这个数字化时代,AI绘画成为了一项引人注目的副业,为美术老师们带来了新的机遇和收入。 儿童画 …

实验场:在几分钟内使用 Elasticsearch 进行 RAG 应用程序实验

作者:来自 Elastic Joe McElroy, Serena Chou 什么是 Playground(实验场)? 我们很高兴发布我们的 Playground 体验 —- 一个低代码界面,开发人员可以在几分钟内使用自己的私人数据探索他们选择的 LLM。 在对对话式搜…

“实时数据大屏2k、4k、8k”这样做【高级前端必备技能之一】

🔥废话不多先上效果图 🔥划重点 新手程序员需要注意以下几点: 我们需要进行充分的技术调研,进行技术选型产品,UI,再三确认效果图是否确定,避免后续出现返工的情况 不能拿到效果图之后&#x…

事务的概念-事务的概念、事务的定义(BEGIN TRANSACTION、COMMIT、ROLLBACK)

数据库系统中的事务,是保证系统在发生故障后或存在并发操作的情况下,数据库中的数据与企业业务结果相一致 一、事务的概念 在许多数据库应用系统中,数据库用来存储现实世界中一些企业的状态信息或其管理的数据 1、概念一 (1&a…

《昇思25天学习打卡营第3天|张量 Tensor》

文章目录 前言:今日所学:1. 创建张量2. 张量的属性3.张量索引与运算4. NumPy与Tensor的转换5. 稀疏张量 前言: 张量?张亮?张量是什么? 张量是一个可以用来表示在一些矢量、标量和其他张量之间的线性关系的…