Java 五种内部类演示及底层原理详解

内部类

什么是内部类

在A类的内部定义B类,B类就被称为内部类

发动机类单独存在没有意义 发动机为独立个体

可以在外部其他类里创建内部类的对象去调用方法

类的五大成员

属性 方法 构造方法 代码块 内部类

内部类的访问特点

内部类可以直接访问外部类的成员,包括私有

外部类要访问内部类的成员,必须创建对象

访问特点原因

如果在测试类中调用show方法 必须先创建对象

然后给对象的属性赋值

当当前方法被调用时

java虚拟机会把调用方法者的地址值传递给this

所以在代码中打印 时 打印调用者的信息

不然就找不到了 找不到对象

ArrayList类源代码

ArrayList类 集合类

集合存储数据

通过遍历可以获得数据

ArrayListL里有个内部类叫迭代器Itr

对于集合类来说相对独立,而又属于集合,所以设为内部类

对内部类总结

1.什么是内部类

写在一个类里面的类叫做内部类

2.什么时候用到内部类

B类表示的事物是A类的一部分,且B单独存在没有意义

比如汽车的发动机 ArrayList类的迭代器 人的心脏

内部类的种类

成员内部类

了解

写在成员位置 属于外部类的成员

成员内部类代码如何书写

如果用private私有修饰内部类对象

那只能在外部类中创建对象

private修饰符 只能在本外部类中使用

默认权限可以只在本包中使用

protected修饰符 可以在本包中的其他类中使用 可以在其他包的子类也可以用

外面的孩子也是受保护的

public修饰符 公共的 随处都可以创建对象

如何创建成员内部类的对象

方法1: 直接创建格式 外部类名.内部类名 对象名=外部类对象.内部类对象

成员内部类实际上和成员变量 成员方法本质是一样的

通过创建对象去调用 注意使用链式编程

方式2:在外部类中编写方法 对外提供内部类的对象

通过在外部类编写 getInstance方法 获得被private修饰的内部类方法

测试类接收方法

两种方式

1.用父类接收 形成多态

2.直接获取对象

面试题

内存图

在堆内存里外部类对象先加载进去 再加载内部类对象 开辟新空间

java会给内部类对象一个隐藏的this变量用来记录外部类的地址值

总结

静态内部类

静态内部类只能访问外部类中的静态变量和静态方法

如果想要访问非静态的需要创建对象

只要是静态的东西都可以用类名.直接使用

调用非静态内部类中的方法

调用静态内部类中的方法

总结

特殊的成员内部类 静态内部类

创建静态内部类对象的方式 Outer.inner.oi=new Outer.Inner();

如何调用静态内部类中的方法

局部内部类

了解即可

将内部类定义在方法里面

类似于方法里的局部变量

外部是无法直接使用的 需要在方法内部创建对象并使用

该类可以直接访问外部类的成员 也可以访问方法内的局部变量

匿名内部类

相对最重要的

匿名内部类本质上是隐藏了名字的内部类

书写格式

如下图

匿名内部类实质上是swim类接口的实现类

student类实现swim类接口

重写swim类中的抽象方法

实现后 上去名字

swim后花括号里的内容即为swim接口的实现类

先把前面的class去掉 剩下的内容就是一个没有名字的类

表示这个没有名字的类实现的swim类的接口 所以要在类中重写接口中所有的抽象方法

如何创建没有名字类的对象

创建对象 new 类名();

即把new方法放到swim前面 再在后面加上()表示用空参构造构建

new是创建花括号里没有名字类的对象

匿名内部类实际上是对象 整体是一个对象 即为匿名内部类的对象

中间的格式

继承关系

花括号里的内容是animal的子类

等号左右是接口 右边是接口实现类对象

形成接口多态

并且

总结

匿名内部类是隐藏了名字的内部类

可以写在成员位置 也可以写在局部位置

格式:

new 类名或者接口名(){

重写方法

}

包括继承或实现,方法的重写,创建对象

整体就是一个类的子类对象或者接口的实现类对象

使用场景

当方法的参数是接口或者类时

以接口为例,可以传递这个接口的实现类对象

如果实现类只使用一次,可以用匿名内部类来简化代码

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

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

相关文章

AI手语研究数据集;视频转视频翻译和风格化功能如黏土动画;AI检测猫咪行为;开放源码的AI驱动搜索引擎Perplexica

✨ 1: Prompt2Sign 多语言手语数据集,便捷高效用于手语研究。 Prompt2Sign 是一个全面的多语言手语数据集,旨在通过工具自动获取和处理网络上的手语视频。该数据集具有高效、轻量的特点,旨在减少先前手语数据集的不足之处。该数据集目前包含…

代码随想录算法训练营Day 50 | 动态规划part12 | 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

代码随想录算法训练营Day 50 | 动态规划part12 | 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费 文章目录 代码随想录算法训练营Day 50 | 动态规划part12 | 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费309.最佳买卖股票时机含冷冻期一、两…

AI架构设计7:TGI

这个专栏主要关注围绕着AI运用于实际的业务场景所需的系统架构设计。整体基于云原生技术,结合开源领域的LLMOps或者MLOps技术,充分运用低代码构建高性能、高效率和敏捷响应的AI中台。该专栏需要具备一定的计算机基础。 若在某个环节出现卡点,…

员工管理和激励怎么做?试试场景化激励解决方案!

截止到2020年底,中国企业主体数量达3858.3万,同比增速达11.1%。如何留住人才、激励人才以强化人才与企业“黏性”,最大化提升员工的忠诚度与敬业度,成为企业未来人才发展战略的主要方向之一。 一、传统激励方式存在哪些不足 传统的…

香橙派 AIpro初体验

香橙派(Orange Pi)AI Pro开发板是一款高性能的AI开发板,由香橙派联合华为精心打造。香橙派(Orange Pi),作为深圳市迅龙软件有限公司倾力打造的开源产品品牌,致力于向全球个人及企业用户提供卓越…

十五届蓝桥杯国赛模拟(下)

题单详情 - 蓝桥云课 (lanqiao.cn) 填空题: 2360 互质 互质的定义是:两个数最大公约数为1,因此此题利用gcd模板即可AC: #include<iostream> using namespace std; int ans; int gcd(int a,int b){return b?gcd(b,a%b):a; } int main(){for(int i1;i<2020;i) if(g…

C#实现Queue的加锁和解锁

在C#中&#xff0c;可以使用lock语句来对队列进行加锁和解锁&#xff0c;以确保在多线程环境下的线程安全。以下是一个简单的示例&#xff1a; using System; using System.Collections.Generic; using System.Threading;public class ThreadSafeQueue<T> {private read…

设计软件有哪些?建模和造型工具篇(3),渲染100邀请码1a12

这次我们接着介绍建模工具。 1、FloorGenerator FloorGenerator是由CG-Source开发的3ds Max插件&#xff0c;用于快速创建各种类型的地板和瓷砖。该插件提供了丰富的地板样式和布局选项&#xff0c;用户可以根据需要轻松创建木质地板、石板地板、砖瓦地板等不同风格的地面。F…

Spring 框架中 Bean 的生命周期?

在 Spring 框架中&#xff0c;Bean 的生命周期包括以下几个阶段: 1. 实例化(Instantiation):在这个阶段&#xff0c;Spring将根据配置文件或注解等方式创建Bean实例&#xff0c;并将其存储在容器中。 2. 属性赋值(PopulateProperties):在这个阶段&#xff0c;Spring将会自动将…

人生二选一:央企就业?美国做博士后?—请看她的抉择

一位30岁的女博士&#xff0c;收到国内央企和德国、美国的博士后邀请函&#xff0c;她该如何选择&#xff1f;知识人网小编推荐这篇文章&#xff0c;为大家解开谜题的同时&#xff0c;也给有同样纠结的学者提供一些启迪。 去年12月底的一个晚上&#xff0c;我收到美国一所高校发…

100个 Unity小游戏系列六 -Unity 抽奖游戏专题四 翻卡游戏

一、演示效果 二、知识点讲解 2.1 布局 void CreateItems(){reward_data_list reward_data_list ?? new List<RewardData>();reward_data_list.Clear();for (int i 0; i < ItemCount; i){GameObject item;if (i 1 < itemParent.childCount){item itemParent…

前端基础入门三大核心之HTML篇:Webpack、Vite、Grunt、Gulp的场景与实战运用

前端基础入门三大核心之HTML篇&#xff1a;Webpack、Vite、Grunt、Gulp的场景与实战运用 一、Webpack&#xff1a;模块打包与优化的集大成者基本概念与作用应用场景实战例 二、Vite&#xff1a;快速开发的现代化构建利器基本概念应用场景实战例 三、Gulp&#xff1a;任务自动化…

护网期间遇到的几个上传bypass waf、edr

1. weblogic部署war的时候 http/1.1 改成http/2绕过waf 其实jar和ear部署应该也可以&#xff0c;但是我没成功。 2. tomcat windows的话部署 1.war变成 1.w/a/r 应该是 1.w\a\r 3. 上传绕过waf filename"x.jsp" 换成 filename x.jsp 还不行把 把ban…

【MySQL精通之路】SQL优化(1)-查询优化(7)-嵌套循环联接

主博客&#xff1a; 【MySQL精通之路】SQL优化(1)-查询优化-CSDN博客 上一篇&#xff1a; 【MySQL精通之路】SQL优化(1)-查询优化(6)-索引条件下推-CSDN博客 下一篇&#xff1a; 1.嵌套循环连接算法 一个简单的嵌套循环联接&#xff08;NLJ&#xff09;算法一次从循环中的…

Python解析网页-requests_html

目录 1、什么是requests_html 2、安装与配置 3、快速入门 4、图片下载 1.什么是requests_html requests_html是一个Python库&#xff0c;用于从Web页面中提取数据。 它提供了对HTML内容的解析和处理功能&#xff0c;使您可以轻松地从网页中提取文本、链接、图像和其他元素。…

python字典形式的字符串转换成python字典的两种方法eval()和json.loads()

有时候我们需要将python字典形式的字符串转化成python字典&#xff0c;有两种方法&#xff1a; 方法一&#xff1a;eval() dic_str "{name:jack, age:18, gender:male}" # dic_str {"name":"jane", "age":27, "gender":…

嵌入式UI开发-lvgl+wsl2+vscode系列:4、动画(Animations)

文章目录 一、前言二、动画示例1、示例1&#xff08;基础按钮label的组合动画&#xff09;2、示例2&#xff08;回放效果动画&#xff09;3、示例3&#xff08;贝塞尔曲线3动画&#xff09;4、示例4&#xff08;动画时间轴&#xff09; 三、最后 一、前言 接下来我们进行动画的…

Golang | Leetcode Golang题解之第101题对称二叉树

题目&#xff1a; 题解&#xff1a; func isSymmetric(root *TreeNode) bool {u, v : root, rootq : []*TreeNode{}q append(q, u)q append(q, v)for len(q) > 0 {u, v q[0], q[1]q q[2:]if u nil && v nil {continue}if u nil || v nil {return false}if …

pnpm使用教程

pnpm&#xff08;Performant npm&#xff09;是一个高性能的包管理器&#xff0c;旨在解决npm和yarn中的问题&#xff0c;提供更快的安装速度、节省磁盘空间、良好的monorepo支持以及高级安全性。下面是一个简要的pnpm使用教程&#xff1a; 安装 pnpm 通过 npm 安装 在已安装…

JWT使用方法

目录 基础概念 依赖 生成令牌 工具类 控制层 解析令牌 工具类 网关过滤器 效果 基础概念 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准&#xff08;(RFC 7519).该token被设计为紧凑且安全的&#xff0c;特别适用于分布式站点…