内部类(来自类和对象的补充)
❤️❤️前言~🥳🎉🎉🎉
hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥💥,如果发现这篇文章有问题的话,欢迎各位评论留言指正,大家一起加油!一起chin up!👍👍
💥个人主页:E绵绵的博客
💥所属专栏:JAVASE题目练习 JAVASE知识点专栏 c语言知识点专栏 c语言题目练习
之前我们在讲类和对象时就提到过内部类,不过当时说了等讲完抽象类和接口再讲这个,现在兑现诺言的时候到了,那我们开始内部类的学习吧!

内部类
❤️❤️内部类是指在一个类的内部定义的另一个类。内部类可以访问外部类的所有成员,包括私有成员。内部类提供了一种封装和组织代码的方式,可以将相关的类和接口放在一起,增加代码的可读性和可维护性。
分为以下四种:
实例(成员)内部类,静态内部类,局部(方法)内部类,匿名内部类。
内部类虽然在外部类里面,但是它编译时内部类会形成单独的字节码文件
实例内部类
❤️❤️实例内部类的成员变量和成员方法都不能用static修饰。
但存在一个特殊的点:实例内部类中的成员变量也可以用static修饰,只不过那必须加上final修饰使其变为常量才可以用static修饰。
❤️❤️我们要清楚虽然内部类在外部类里面,但实例化外部类并不会同时实例出内部类,所以当实例出外部类后,内部类需要我们主动实例化。
所以实例内部类的实例化需要先创建外部类的实例,然后再通过外部类的实例来创建实例内部类的对象。
例如,如果外部类是Outer,实例内部类是Inner,那么可以通过Outer outer = new Outer(); Outer.Inner inner = outer.new Inner(); 来实例化实例内部类.
当然还有另外一种方式也可以实例化实例内部类:Outer.Inner inner=new Outer().new lnner();
❤️❤️在实例内部类中我们可以访问外部类的所有成员,包括私有成员。具体细节如下:
1. 🎯🎯当外部类和内部类成员不同名时,我们可以在实例内部类中直接使用外部类的成员变量和成员方法,无需前面还要引用:
在上图中InnerClass是实例内部类,我们在该内部类中直接使用了外部类中的成员变量a,但切记注意这里的a前面不能带this,如果带了this就表示这是内部类中的a,但我们内部类中不存在同名的a,所以报错。不带this直接用a时因为内部类没a所以就表示这是外部类中的a。
成员方法跟成员变量同理。
2. 🎯🎯而当内部类和外部类存在同名的成员变量时,内部类直接使用它时会优先选择自己的成员变量。如下:
此时就因为a同名导致直接使用a时优先选择内部类中的a,所以a和this.a都表示内部类中的a,而如果我们硬要使用外部类中的a时,就可以用 外部类的类名.this.a如OutClass.this.a表示这是外部类的a(注意这是特定的语法规则,我也不知道为什么用这样的格式能表示出外部类).
成员方法跟成员变量同理
❤️❤️而在外部类中我们不能直接访问实例内部类的成员,需要通过创建实例内部类的对象再引用访问。(这个懂得都懂,就不多讲了)
❤️❤️除此之外,到了其他类中我们用内部类对象引用就只能引用其内部方法和变量(不能引用外部类的)
用外部类对象引用也只能引用其方法和变量(不能引用内部类的)
❤️❤️下面我们再看下文案,防止你们没看懂:
![]()
静态内部类
❤️❤️我们现在说一下静态内部类跟实例内部类不同的点吧:
🎯🎯1.静态内部类可以有静态方法和变量,也可以有实例方法和变量。
🎯🎯2.静态内部类的创建不依赖于外部类的实例对象,可以直接通过外部类名创建。
如 OutClass.InnerClass innerClass = new OutClass.InnerClass();(OutClass为外部类,InnerClass为内部类)。
所以因为静态内部类的创建不需要先创建外部类,我们往往用静态内部类比实例内部类多一点。
🎯🎯3. 静态内部类可以直接访问外部类的静态成员,但不能直接访问外部类的非静态成员。如果需要访问外部类的非静态成员,可以通过在内部类中创建外部类的对象来实现。
如添加OutClass outclass=new OutClass();而后将在内部类中且原本来自外部类的实例变量和实例方法前加上outclass. 就可以了。
❤️❤️所以这就是静态内部类跟实例内部类的不同,其他的它们两基本都相同,所以我们了解了这些不同点就可以了。
局部内部类
❤️❤️定义在外部类的方法体中,该种内部类只能在其定义的位置使用,一般使用的非常少,此处简单了解下语法格式。不过多了解。
所以对于局部内部类它只能在外部类的某个方法体内使用,使用性很有限。
❤️❤️【注意事项】
1. 局部内部类只能在所定义的方法体内部使用
2. 不能被public、static等修饰符修饰
3. 编译器也有自己独立的字节码文件,命名格式:外部类名字$数字内部类名字.class
4. 几乎不会使用,所以我们不必过多了解
匿名内部类
🎯🎯匿名内部类是指在使用时才定义并同时实例化的内部类,没有显式的类名。其语法格式如下:
接口 类名 = new 接口() {// 匿名内部类的成员变量和方法 };注意实施该接口的类被隐藏了,没有显示出来(以及implements也没显示出来),我们new是对隐藏的该类进行实例化。对于该种格式它是特有的,所以我们只需要记住就行。
下面直接看匿名内部类的使用:
public class Main {public static void main(String[] args) {// 创建一个接口对象,并实现其方法MyInterface myInterface = new MyInterface() {@Overridepublic void doSomething() {System.out.println("匿名内部类实现的方法");}};// 调用接口方法myInterface.doSomething();} }// 定义一个接口 interface MyInterface {void doSomething(); }所以这就是匿名内部类的使用,之后当学到线程时我们会经常接触这种语法的。
总结
所以我们内部类就结束啦,内部类结束我们的类与对象才算真正的结束。之后将给大家把之前学的知识点总结起来写一个小项目。还请各位铁汁们给作者点一个小小的关注,评评论呀,感谢各位大佬~❤️❤️🥳🎉🎉🎉!

相关文章:
内部类(来自类和对象的补充)
❤️❤️前言~🥳🎉🎉🎉 hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥&a…...
Android 高德地图
1.获取Key 进入高德开放平台控制台,创建一个新应用。在创建的应用上点击"添加key"按钮,在弹出的对话框中,依次输入key名称,选择服务平台为“Android平台”,输入发布版安全码 SHA1、以及 Package。 获取 S…...
代码随想录|Day31|贪心06|738.单调递增的数字
738.单调递增的数字 思路: 1. 从右向左遍历 从字符串的最后一位向前遍历,即从低位到高位进行检查。这是因为当我们修改某一位数字时,可能会影响到更低位的数字。 2. 检查并修改数字 在遍历过程中,如果发现当前位数字小于其前一位&…...
机械制造学习笔记
一、切削加工、切削运动的基本概念及刀具切削过程 切削加工: 定义:切削加工是利用切削刀具对工件进行切削,以去除多余材料并得到所需形状和尺寸的加工方法之一。应用:广泛应用于金属加工、木材加工、塑料加工等领域,是…...
Golang | Leetcode Golang题解之第3题无重复字符的最长子串
题目: 题解: func lengthOfLongestSubstring(s string) int {// 哈希集合,记录每个字符是否出现过m : map[byte]int{}n : len(s)// 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动r…...
SWM341系列应用(上位机应用)
SWM341系列之上位机应用 1、分级图像和PNG、JPG的应用 现象:客户使用SWM34SVET6HMI_0.4.1版本上位机进行UI界面布局,反馈在模拟运行时(PC端)流畅,在Demo平台(设备端)运行卡顿。 分析及解决&…...
【软件工程】详细设计(一)
1. 引言 1.1 编写目的 该文档的目的是描述《学生成绩管理系统》项目的详细设计,其主要内容包括: 系统功能简介 系统详细设计简述 各个模块的实现逻辑 最小模块组件的伪代码 本文档的预期的读者是: 开发人员 项目管理人员 测试人员 …...
【AIGC】如何在Windows/Linux上部署stable diffusion
文章目录 整体安装步骤windows10安装stable diffusion环境要求安装步骤注意事项参考博客其他事项安装显卡驱动安装cuda卸载cuda安装对应版本pytorch安装git上的python包Q&A linux安装stable diffusion安装anaconda安装cudagit 加速配置虚拟环境挂载oss(optional…...
基于java实现的弹幕视频网站
开发语言:Java 框架:ssm 技术:JSP JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclip…...
【大数据存储】实验4 NoSQL数据库
实验4 NoSQL数据库 NoSQL数据库的安装和使用实验环境: Ubuntu 22.04.3 Jdk 1.8.0_341 Hadoop 3.2.3 Hbase 2.4.17 Redis 6.0.6 mongdb 6.0.12 mogosh 2.1.0 Redis 安装redis完成 新建终端启动redisredis-server新建一个终端redis-cli 建表操作 尝…...
从零学算法80
80. 删除有序数组中的重复项 II 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外…...
Jupyter notebook文件默认存储路径以及更改方法
初次使用Jupyter Notebook,确实好用啊!但安装Anaconda后,打开Jupyter Notebook 的时候,新建文件的默认存储路径一般在C系统盘下面的XXX目录,那么路径是什么呢?我想把文件保存到其他的文件夹下应该怎么做呢&…...
WPF中通过自定义Panel实现控件拖动
背景 看到趋时软件的公众号文章(WPF自定义Panel:让拖拽变得更简单),发现可以不通过Drag的方法来实现ListBox控件的拖动,而是通过对控件的坐标相加减去实现控件的位移等判断,因此根据文章里面的代码,边理解边…...
Centos7安装Docker与Docker-compose【图文教程】
个人记录 查看一下系统是否已经安装了Docker yum list installed | grep docker如下图代表没有安装Docker 卸载已有Docker yum remove docker docker-common docker-selinux docker-engine切换目录 cd /etc/yum.repos.d/查看当前目录所有的镜像源 ll安装yum-util与devi…...
mac电脑maven配置环境变量
1、下载maven https://maven.apache.org 2、配置环境变量 vim .bash_profile JAVA_HOME/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home PATH$JAVA_HOME/bin:$PATH export JAVA_HOME export PATH#maven export MAVEN_HOME/Users/haines/desktop/work/java/a…...
后端返还二进制excl表格数据时候,如何实现在前端下载表格功能及出现表格打开失败的异常处理。
背景: 后端返还一个二进制流的excl表格数据,前端需要对其解析,然后可提供给客户进行下载。 思路:把二进制流数据转换给blob对象,然后利用a标签进行前端下载。 代码: 后端返还 类似如下的数据 前端代码…...
搞学术研究好用免费的学术版ChatGPT网站-学术AI
学术版ChatGPThttps://chat.uaskgpt.com/mobile/?user_sn88&channelcsdn&scenelogin 推荐一个非常适合中国本科硕士博士等学生老师使用的学术版ChatGPT, 对接了超大型学术模型,利用AI技术实现学术润色、中英文翻译,学术纠错&#…...
vue3从精通到入门9:计算属性computed
在 Vue 3 中,computed 是一个用于创建计算属性的工具,它基于组件的响应式依赖进行复杂的计算,并返回一个新的响应式引用。计算属性是 Vue 的一个核心概念,它提供了一种声明式的方式来执行基于其依赖的响应式数据的计算。 compute…...
kafka面试常见问题
1、如何判断kafka某个主题消息堆积? 要判断Kafka中某个主题的消息是否堆积,可以通过查看该主题的生产者和消费者的偏移量(offset)差异来实现。Kafka中的每条消息在主题的分区内都有一个唯一的偏移量,生产者每发送一条…...
深入解析Hadoop生态核心组件:HDFS、MapReduce和YARN
这里写目录标题 01HDFS02Yarn03Hive04HBase1.特点2.存储 05Spark及Spark Streaming关于作者:推荐理由:作者直播推荐: 一篇讲明白 Hadoop 生态的三大部件 进入大数据阶段就意味着进入NoSQL阶段,更多的是面向…...
保姆级教程:手把手教你用Intel RealSense D435i进行动态标定(附打印目标尺寸)
深度相机动态标定实战:从原理到精准优化的完整指南 在计算机视觉和机器人领域,深度相机的标定质量直接决定了三维感知的精度。许多开发者在初次使用Intel RealSense D435i这类设备时,常常会遇到深度图像噪点多、边缘模糊或数据空洞等问题。这…...
为什么顶尖投行/律所/药企已将Perplexity设为默认搜索端口?:拆解其底层Provenance Graph引擎与ChatGPT RAG架构的7层信任差
更多请点击: https://intelliparadigm.com 第一章:Perplexity与ChatGPT搜索范式的根本性分野 Perplexity 和 ChatGPT 代表两种截然不同的信息交互哲学:前者以**可验证的溯源驱动**为核心,后者以**生成连贯性优先**为设计原则。这…...
libiec61850实战:客户端如何动态遍历未知设备的数据模型
1. 理解libiec61850动态模型遍历的核心场景 在工业自动化系统中,经常会遇到需要对接未知型号IED设备的情况。想象一下你作为系统集成商,现场新安装了一台保护装置或智能传感器,但手头没有它的SCL配置文件(.cid或.scd)。…...
CANN/GE动态输入Python构图示例
样例使用指导 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前…...
NRF52833开发实战:从零构建Keil工程与一键烧录
1. 环境搭建:从零准备NRF52833开发工具链 第一次接触NRF52833开发时,最头疼的就是环境配置。记得我刚开始用Keil调试蓝牙项目时,光是找齐所有安装包就花了整整两天。现在把完整工具链的获取方式和避坑要点整理给你,新手照着做半小…...
3403开源:黄大年茶思屋榜文保姆级全落地解法「34期 3题」融合算力跨层语义感知协同调度体系双路径工程落地全解
华夏之光永存・开源:黄大年茶思屋榜文保姆级全落地解法「34期 3题」 小标题:融合算力跨层语义感知协同调度体系双路径工程落地全解 一、摘要 融合算力跨层语义感知协同调度领域,当下异构算力分立管控、静态资源划分、单任务独占调度等传统模式已触及全球工程性能绝对天花…...
Arm CoreSight SoC-400时间戳系统架构与实现
1. Arm CoreSight SoC-400时间戳系统架构解析在复杂的多核SoC调试场景中,精确的时间戳记录能力是定位问题的关键。Arm CoreSight SoC-400采用的分层时间戳架构,通过硬件级实现解决了传统软件时间戳存在的精度不足和CPU负载问题。这套系统主要由三个核心组…...
VideoDownloadHelper深度解析:破解主流视频平台下载限制的技术实战
VideoDownloadHelper深度解析:破解主流视频平台下载限制的技术实战 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 还在为无法保存…...
WarcraftHelper完整指南:让魔兽争霸III在现代电脑上重获新生
WarcraftHelper完整指南:让魔兽争霸III在现代电脑上重获新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸III在Windows …...
一本通题解——从递推公式到状态转移:破解“位数问题”中的数字计数
1. 从具体问题到通用模型:理解数字计数的本质 遇到"统计N位数中偶数个3的个数"这类问题时,很多初学者会陷入暴力枚举的思维陷阱。我刚开始刷题时也犯过这个错误——试图手动列出所有两位数来验证样例。这种方法的局限性在N1000时就会暴露无遗…...





