Java学习笔记002——类的修饰符

在Java语言中,类的访问修饰符决定了其它类能够访问该类的方式。类有如下4种访问修饰符,在创建类时用于类的声明:

1、public:

  • 当一个类被声明为public时,它可以从任何其他类中被访问,无论这些类位于哪个包中。
  • 通常,公共类包含公共的静态方法,这些方法可以被其他任何类调用,以及公共的实例方法,这些方法可以被其他任何类的实例调用。
  • 顶层类只能是公开的或者是默认(包级私有)的。

2、protected:

  • protected访问修饰符允许类被其所在包中的其他类以及所有子类访问,无论子类是在哪个包中。
  • 这意味着,如果一个类是在包com.example中声明的protected,那么com.example包中的任何其他类以及任何继承自这个类的子类(无论它们在哪个包中)都可以访问这个类。

3、默认访问修饰符(无修饰符):

  • 当类没有显式声明任何访问修饰符时,它只能被其所在包中的其他类访问。

这种访问级别有时被称为“包级私有”,因为它限制了类只能在同一个包内部被访问。

4、private:

  • 在Java中,private访问修饰符不能用于顶层类(即非内部类或非嵌套类)。
  • 它只能用于类的成员(如字段、方法、内部类等),表示这些成员只能在它们自己的类中被访问。

下面是一个示例,展示了如何在Java中使用不同的访问修饰符来声明类:

// MyClass.java  
public class MyClass { // public 类  // 可以在任何地方被访问  
}  // AnotherClass.java  
class AnotherClass { // 默认访问修饰符(无修饰符)的类  // 只能在同一个包中被访问  
}  // ProtectedClass.java  
protected class ProtectedClass { // protected 类  // 可以在同一个包中和所有子类中被访问  
}  // InnerClass.java  
public class OuterClass {  protected class ProtectedInnerClass { // 嵌套类可以是 protected  // 可以在同一个包中和所有子类中被访问  }  class DefaultInnerClass { // 默认访问修饰符的嵌套类  // 只能在同一个包中被访问  }  
}

在Java中,private访问修饰符修饰的类不能用于顶层类(即非内部类或非嵌套类)。顶层类总是具有包级私有访问权限:public,protectded,默认(没有任何修饰符,也具有包级私有访问权限)。

作为一个只能作为内部类的私有类,可以被在所在的顶层类中被实例化访问:

(1)在顶层类的方法中实例化访问;

(2)在顶层类中其它内部类中访问。

package com.test;public class OuterClass {/*** 外部类(顶层类)OuterClass* 类中嵌套3个类:分别为私有(private),静态(static),默认访问修饰符(无修饰符)的类*/private class PrivateInnerClass {/*** PrivateInnerClass是一个私有内部类,只能在顶层类OuterClass中被访问:* 1、可以在OuterClass中方法中创建实例访问* 2、也可以在OuterClass中的内部其他类中的方法中访问* PrivateInnerClass类也可以访问顶层类OuterClass中的其它类。*/String name = "PrivateInnerClass.name";public void test() {// 创建内部类DefaultInnerClass的实例DefaultInnerClass a = new DefaultInnerClass();System.out.println("在私有内部类PrivateInnerClass类中调用DefaultInnerClass中属性name:" + a.name);}}static class StaticNestedClass {// 这是一个静态嵌套类,可以在任何地方被访问,因为它具有包级私有访问权限String name = "StaticNestedClass.name";}class DefaultInnerClass {// 这是一个默认访问修饰符的内部类,只能在同一个包中的OuterClass中被访问String name = "DefaultInnerClass.name";public void test() {StaticNestedClass a = new StaticNestedClass();System.out.println("在内部defalut类DefaultInnerClass中调用内部静态类StaticNestedClass的属性name:" +a.name);PrivateInnerClass b = new PrivateInnerClass();System.out.println("在内部defalut类DefaultInnerClass中调用内部私有类PrivateInnerClass的属性name:" +b.name);}}// 定义print方法public void print(String str) {System.out.println(str);PrivateInnerClass a = new PrivateInnerClass();System.out.println("调用内部私有类PrivateInnerClass中的成员name" + a.name);a.test();StaticNestedClass b = new StaticNestedClass();System.out.println("调用内部静态类StaticNestedClass中的成员name" + b.name);DefaultInnerClass c = new DefaultInnerClass();System.out.println("调用内部default类DefaultInnerClass中的成员name" + c.name);c.test();}
}

如上代码验证运行无误,另外需要理解的知识点:

对后缀为.java的文件进行编译,文件中的所有类都将被编译为一个独立的后缀为.class文件(java字节码文件)。

对于一个顶层类中定义了一个或者多个内部类也是如此,但是内部类编译后的.class类文件名是“顶层类名$私有类名.class"。编译如上代码OutClass.java文件,将产生如下几个文件:

1、顶层类文件:OutClass.class

2、私有类文件:OuterClass$DefaultInnerClass.class,OuterClass$PrivateInnerClass.class,OuterClass$StaticNestedClass.class。

这是Java提供的一个强大特性,即可以在单个文件中组织多个相关的类,同时保持它们在编译后的独立性。

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

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

相关文章

uniapp使用vue3语法构建自定义导航栏,适配小程序胶囊

具体代码 <template><view class"nav-wrapper-container" :style"height:navBarHeight px"><view class"nav-status-container" :style"height:navstatusBarHeight px;" /><view v-if"isCustom" clas…

数字化转型导师坚鹏:BLM证券公司数字化转型战略

BLM证券公司数字化转型战略 ——以BLM模型为核心&#xff0c;实现知行果合一 课程背景&#xff1a; 很多证券公司存在以下问题&#xff1a; 不知道如何系统地制定证券公司数字化转型战略&#xff1f; 不清楚其它证券公司数字化转型战略是如何制定的&#xff1f; 不知道…

Redis 淘汰策略、持久化、高可用

淘汰策略 只有 redis 内存空间已满并且往里面写新数据&#xff0c;才会触发淘汰策略。通过 expire / / /pexpire 让 key-value 过期&#xff0c;从而让 redis 清除这个 key-value。value 的数据结构typedef struct redisObject {unsigned tpye:4;unsigned encoding:4;// 判断哪…

个人数仓开发面试题记录

一.广州电商公司 1.简单自我介绍 2.介绍下之前的公司离线数仓项目 3.mysql和hive区别&#xff1f; 4.sql的执行顺序&#xff1f; 5.hive的优化 6.说下你之前公司来&#xff0c;你的技能层次在每个公司&#xff1f;你怎么评价你的技能&#xff1f; 7.你的之前业务主要是做什么&…

Linux基础命令[10]-cmp

文章目录 1. cmp 命令说明2. cmp 命令语法3. cmp 命令示例3.1 不加参数3.2 -b&#xff08;显示不同的字节&#xff09;3.3 -i&#xff08;跳过字节&#xff09;3.4 -l&#xff08;显示所有不同&#xff09;3.5 -n&#xff08;比较n个字节&#xff09;3.6 -s&#xff08;不显示信…

el-select 不能重复选择

el-select 不能重复选择&#xff0c;注意&#xff1a;删除后可以再次重新被选择 <el-form-item><el-select v-model"attribute.attributeSelect" change"changeSelect()" placeholder"请选择属性分组" clearable><el-optionv-fo…

PostgreSQL restartpoint 原理详解

背景 大部分人对 PG 的 checkpoint 机制会熟悉一点&#xff0c;但是对 restartpoint 却不太熟悉&#xff0c;网上介绍这方面的文章也比较少。因此&#xff0c;本文将以 PG 14.7 的社区代码为基础&#xff0c;介绍 PG 中的 restartpoint 机制。 原理介绍 什么是 restartpoint…

华为OD技术面试案例1-2024年

背景&#xff1a; 学校背景&#xff1a;211本科工作经验&#xff1a;1年半转行目标&#xff1a;测试岗位 一、机考 &#xff08;得分&#xff1a;350&#xff09; 二、01.04 hr面 自我介绍选择东莞的原因对OD&#xff08;华为研发岗位&#xff09;的看法家庭情况简历相关问…

信息论笔记:信息量+熵+相对熵+交叉熵+损失函数

信息论 信息量 I(x) -log( P )I为信息量P为x发生的概率 熵 混乱程度的度量&#xff0c;不确定的局面表示很混乱系统里信息量的期望值H(x) -sum( P(i) * log( P(i) ) ) 相对熵(KL散度) 用于度量两个概率分布间的差异性信息D_KL(S | O) sum( P_S(x) * log_2( 1 / P_O(x)…

Mysql学习之各种锁

锁 事务的隔离性由锁来实现 MySQL并发事务访问相同记录 并发事务访问相同记录的情况大致可以分为3种&#xff1a; 读-读的情况 读-读情况&#xff0c;即并发事务相继读取相同的记录。读取操作本身不会对记录由有任何的影响&#xff0c;并不会引起什么问题&#xff0c;所以允许…

简要讲解OV7725摄像头

本文主要包含以下几部分内容&#xff1a; 1. 通过OV7725分析模块原理图。 2. 讲解部分寄存器的含义、RGB565格式图像输出时序、帧率计算。 3. 讲解SCCB协议与I2C协议的区别。 1、OV7725功能 OV7725是一款1/4英寸单芯片图像传感器&#xff0c;其感光阵列达到640*480&#xff0c…

LibreOJ 137. 最小瓶颈路(加强版) 题解 Kruscal重构树 ST表

声明&#xff1a;本题目是LibreOJ 136. 最小瓶颈路 题解 最小生成树 倍增加强版&#xff0c;建议先学习简单版的做法。 题目链接&#xff1a;LibreOJ 137. 最小瓶颈路&#xff08;加强版&#xff09; 题目描述&#xff1a; 给定一张无向图&#xff0c;询问两个结点之间的最小瓶…

【MySQL 系列】在 Windows 上安装 MySQL

在 Windows 平台上安装 MySQL 很简单&#xff0c;并不需要太复杂的步骤。按照本文的步骤操练起来就可以了。 文章目录 1、下载 MySQL 安装程序2、安装 MySQL 数据库2.1、选择安装类型2.2、检查所需组件2.3、安装所选产品组件2.4、产品配置2.5、配置高可用性2.6、配置服务器类型…

【leetcode】 剑指 Offer学习计划(java版本含注释)(下)

目录 前言第十六天&#xff08;排序&#xff09;剑指 Offer 45. 把数组排成最小的数&#xff08;中等&#xff09;剑指 Offer 61. 扑克牌中的顺子&#xff08;简单&#xff09; 第十七天&#xff08;排序&#xff09;剑指 Offer 40. 最小的k个数&#xff08;简单&#xff09; 第…

c++11多线程:call_once

文章目录 call_once示例一示例二 call_once std::call_once是 C11 标准库中的一个函数&#xff0c;用于确保某个函数只会被调用一次。 单例设计模式是一种常见的设计模式&#xff0c;用于确保某个类只能创建一个实例。由于单例实例是全局唯一的&#xff0c;因此在多线程环境中…

YOLO系列中的“data.yaml”详解!

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、data.yaml介绍 YOLO系列中的data.yaml文件包含了YOLO系列模型运行所需要的数据集路径、数据集中的类别数及标签。数据集路径可以用绝对路径也可以…

Python实现股票信息查询

目前两个常用的股票信息CPI&#xff1a; 腾讯行情CTPAPI接口源码 新浪行情CTPAPI 使用requests模块爬取股票信息&#xff0c;这里以查询股票市值为例。 一、根据股票名称查询股票代码 在python文件夹下设置两个表格GPLIST.xlsx&#xff0c;其中是A股全部代码和股票名称&#…

如何在飞书接入ChatGPT并结合内网穿透实现公网远程访问智能AI助手

文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话&#xff0c;在下面操作步骤中…

MySQL 高可用解决方案(双主双从)

1.环境说明 操作系统&#xff1a;centos7.7 主服务器&#xff1a;node2(192.168.1.102) 从服务器&#xff1a;node3(192.168.1.103) keepalived中虚拟ip(VIP):192.168.1.100 2.准备事项 主库和从库数据库的版本一致把主库的数据同步给从库一份 #对主库进行全局读锁定 FLUSH…

GEE代码条带问题——sentinel-1接缝处理的问题

问题 我有兴趣确定 NDVI 损失最大的年份。我创建了一个函数来收集所有陆地卫星图像并应用预处理。当我导出结果以识别 NDVI 损失最大年份时&#xff0c;生成的数据产品与陆地卫星场景足迹有可怕的接缝线。造成这种情况的原因是什么以及如何调整代码&#xff1f; sentinel1数据…