一文带你快速了解【内部类】

news2025/8/11 18:53:03

1. 什么是内部类?

在一个类 A 中,又定义了一个类 B ,此时这个类 B 就是内部类,而类 A 则是外部类!内部类也是一种封装得表现

public class A{
	class B{
	
	}
}

我们看上面代码,此时 A 就是外部类,B 就是内部类

  • 内部类和外部类共用同一个java源文件,但是经过编译之后,内部类会形成单独的字节码文件
  • 定义在class 类名{}花括号外部的,即使是在一个文件里,都不能称为内部类

2. 内部类的分类

内部类又分为成员内部类局部内部类 下面我们来一一介绍下

2.1 成员内部类

2.1.1 静态内部类

我们先来看是如何定义的

class OuterClass{

	static class InnerClass{

	}
}

此时的 InnerClass 就是静态内部类,因为被 static 修饰


既然是一个类,那么应该如何 来实例化一个静态内部类呢?

public class Test{
	public static void main(String[] args){
		OuterClass.InnerClass innerClass = new OuterClass.InnerClass();
	}
}

那么在静态内部类种,如何访问自己的成员变量和外部类的成员变量呢?
在这里插入图片描述
从图种,我们可以直接看出,当访问外部类 data1 和 data2 的时候,编译报错了,这是为什么呢? 因为 data1 和 data2 是属于外部类的,不是静态的,而所有静态的都不依赖于对象,如果要访问,必须得用对象得引用才能够访问到。


我们再来想下,如何在外部类中访问内部类的成员变量和自己的成员变量?
在这里插入图片描述
从上图种可以看出,要想访问 data4 和 data5 ,就必须创建对象,用对象的引用才能访问,data5 是静态的,可以直接通过类名访问!


总结:

  • 在静态内部类当中,不能直接访问外部类当中的非静态成员,如果想访问,必须实例外部类,然后通过对象的引用来访问
  • 创建静态内部类对象时,不需要先创建外部类对象

2.1.2 非静态内部类

所谓非静态内部类,就是未被static修饰的成员内部类。

class OuterClass{

	static class InnerClass{

	}
}

那么我们如何来实例非静态内部类呢?

public class Test {
    OuterClass outerClass = new OuterClass();
    OuterClass.InnerClass innerClass = outerClass.new InnerClass();
}

可以看出我们实例内部类之前,需要得到外部类的对象,才能够创建实例内部类


那么在非静态内部类中,如何访问自己的成员变量和外部类的成员变量呢?
在这里插入图片描述
可以看出外部类中的任何成员都可以在实例内部类方法中直接访问


在外部类中,又如何访问外部类成员变量和内部类成员变量呢?
在这里插入图片描述
可以看出来,需要先创建 内部类对象,通过引用才能访问 data4 和 data5. 而通过类名就可以访问 data6.


我们再来思考一个问题,当 外部类和内部类 出现同名变量时,应该是访问哪个,答案肯定是就近原则!
在这里插入图片描述
在非静态内部类中,包含了两个this,一个是外部类的 this,一个是非静态内部类的 this
在实例内部类方法中访问同名的成员时,优先访问自己的,如果要访问外部类同名的成员,必须:外部类名称.this.同名成员 来访问


2.1.3 局部内部类

定义在外部类的方法中!

在这里插入图片描述

  • 局部内部类只能在所定义的方法体内部使用
  • 不能被public、static等修饰符修饰
  • 编译器也有自己独立的字节码文件,命名格式:外部类名字$数字内部类名字.class
  • 几乎不会使用

2.1.4 匿名内部类

在这里插入图片描述
那么上面就定义了一个匿名的内部类,那么如何调用呢?

在这里插入图片描述
通过直接 .fuc() 就能够调用

3. 结尾

以上就是介绍了! 如果有不了解,或者错误的地方,请批评指正!!

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

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

相关文章

美团外卖搜索基于Elasticsearch的优化实践

美团外卖搜索工程团队在Elasticsearch的优化实践中,基于Location-Based Service(LBS)业务场景对Elasticsearch的查询性能进行优化。该优化基于Run-Length Encoding(RLE)设计了一款高效的倒排索引结构,使检索…

蚂蚁集团最新业绩出炉:净利润同比下降63%,连续三个季度下滑

11月17日,阿里巴巴集团(简称“阿里”,HK:09988、NYSE:BABA)公布2023财年第二季度(对应自然年2022年第三季度)业绩。财报显示,阿里巴巴2022年第三季度的收入为人民币2071.76亿元(约合…

用 Python 编写 Chrome 扩展赚美刀,通过使用 PyScript 非常轻松(教程含源码)

有很多文章介绍了用于将 Python 代码直接嵌入 HTML的PyScript的出现,但直到现在,在Python中创建浏览器扩展一直是一扇紧闭的门。 我很幸运地获得了PyScript 的工程经理的帮助,并最终弄清楚了如何将 Python 脚本作为 Chrome 扩展运行,并在弹出框中显示输出(参见上面的屏幕…

m无线通信的信道建模matlab仿真,仿真分析了6种不同的无线通信信道模型

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 无线电波的传播环境非常复杂,再加上无线电波自身的多样性,使得电波会通过多种方式和途径从发射天线传播到接收天线。无线视距是指与无线视线相关的路径的长度&…

floyd-warshall算法浅理解

相比于矩阵乘法,floyd巧妙利用了最短路具有最优子结构的性质,即最短路径的子路径也是最短路径,得到以dij(k)d_{ij}^{(k)}dij(k)​(为从i到j的一条中间节点全部取自集合{1,2,...,k}\{1,2,...,k\}{1,2,...,k}的一条最短路径权重&…

全球人口突破80亿!免费分享全球人口分布数据

概述 就在2022年11月15日16:00左右全球人口突破80亿! 全球人口突破80亿 根据此前联合国人口基金会的统计,全球人口在2011年10月31日达到了70亿。 全球人口从70亿增长到今天的80亿,用了11年零半个月。 到2022年,全球哪里人口最…

分组查询子查询

分组查询 分组查询是指使用 group by 字句对查询信息进行分组。 格式: SELECT 字段1,字段2… FROM 表名 GROUP BY分组字段 HAVING 分组条件; 分组操作中的 having 子语句,是用于在分组后对数据进行过滤的,作用类似于 where 条 件。 having与where的区…

在agx xavier上运行 deepstream的样例 deepstream-test4

在agx xavier上运行 deepstream的样例 deepstream-test4 主要演示如何将检测结果通过kafka发送到服务器。 deepstream版本:5.0 前置条件:服务器上正常运行的kafka服务。 下面主要讲发送端的操作。 1、安装依赖项 1)所有样例都需要的依赖…

Prometheus 采集snmp监控数据

download snmp_exporter snmp_exporter采集数据 snmp_exporter 一键监控安装脚本 vim /snmp_exporter.sh #!/bin/sh # -*- coding: utf-8 -*- # Date: 2022/11/18echo "download snmp_exporter" sleep 2 wget -N -P /root/ https://github.com/prometheus/snmp_ex…

美食杰项目 -- 菜谱大全(二)

目录前言:具体实现思路:步骤:1. 展示美食杰菜谱大全效果2. 引入element-ui3. 代码总结:前言: 本文给大家讲解,美食杰项目中菜谱大全实现的效果,和具体代码。 具体实现思路: 点击头…

金蝶苍穹开发工程师初级学习第一节

金蝶苍穹开发工程师初级学习第一节 ✨欢迎关注🖱点赞🎀收藏⭐留言✒ 🔮本文由京与旧铺原创,金蝶首发! 😘系列专栏:低代码学习 💻首发时间:🎞2022年11月12日&a…

github action定时任务

需求 定时任务1 (8:00~13:00),执行bash脚本定时任务2 (18:00),修改定时任务1的执行时间 文档 workflows官方文档workflows action uses查询actions/checkoutv3About the GITHUB_TOKEN secret 问题之refusing to allow a GitHub App to create or upd…

MySQL:常用函数解析、开窗函数示例

数学函数 count() count()、count(field) 统计某个结果集中的总数量,field为要统计的字段。 SELECT count( 1 ) FROM db1.users 复制代码 sum() sum(field) 统计某个字段累计的总和,field为要统计的字段。 SELECT sum( price ) FROM order_info 复制…

Git 操作流程与命令汇总

1. 为什么要使用 git ? 在写项目时,会产生多个版本,以及多个同学协同配合的情况,为了很好的管理,推出了Git, 版本管理工具,持久化,多人化 2. 首先需要弄明白四个概念 工作区:仓库…

深入浅出mybatis分页

MyBatis 分页插件 PageHelper 如何使用&#xff1f; 如何使用分页插件 1&#xff1a;添加依赖 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.5</ver…

基于springboot学生管理系统设计与实现

摘  要 目前&#xff0c;借助信息管理系统能够有效解决高校的信息管理问题&#xff0c;对于提高教育管理水平有着非常重要的作用。 因此&#xff0c;有必要建立一个与之相适应的管理信息系统。基于此&#xff0c;本文为了使教师高效地管理学生信息&#xff0c;需要对现代的学…

【LeetCode-中等】221. 最大正方形(详解)

题目 在一个由 0 和 1 组成的二维矩阵内&#xff0c;找到只包含 1 的最大正方形&#xff0c;并返回其面积。 力扣原题链接 方法1&#xff1a;暴力 暴力法一般不是最优解&#xff0c;但是可以拿来练手 由于正方形的面积等于边长的平方&#xff0c;因此要找到最大正方形的面积&…

【C++】C++基础知识(八)---结构体

C基础知识&#xff08;八&#xff09;1. 定义与使用2. 结构体数组3. 结构体指针4. 结构体嵌套5. 结构体作函数参数6. 结构体中const使用场景7. 结构体使用案例1. 定义与使用 结构体定义&#xff1a; ------结构体属于用户自定义的数据类型&#xff0c;允许用户存储不同的数据类…

元宇宙持续升温,金蝶推出数字员工破圈而来

作者 | 伍杏玲 “金小蝶&#xff0c;请分析今年企业销售事业部的业绩”。 话音刚落&#xff0c;大屏幕展开一张张账务报表&#xff0c;一位身着西装&#xff0c;举止大方得体的数字人条理清晰地回复&#xff1a;“截至今年10月&#xff0c;企业销售事业部在签单金额、新签收入…

数字化转型过程中,企业如何搭建好数据安全?

在企业数字化转型变革中&#xff0c;确保数据安全是企业的责任也是重任。“数据安全”关乎企业数字化发展和未来的商业模式及竞争力&#xff0c;如何在企业数字化转型过程中搭建好“数据安全”的保障&#xff1f; 一、建立数据安全保护意识 互联网时代&#xff0c;有各种各样、…