黑马Java零基础视频教程精华部分_12_面向对象进阶(4)_内部类

news2024/11/20 23:17:30

《黑马Java零基础视频教程精华部分》系列文章目录

黑马Java零基础视频教程精华部分_1_JDK、JRE、字面量、JAVA运算符
黑马Java零基础视频教程精华部分_2_顺序结构、分支结构、循环结构
黑马Java零基础视频教程精华部分_3_无限循环、跳转控制语句、数组、方法
黑马Java零基础视频教程精华部分_4_对象、封装、this关键字、构造方法、对象内存图、成员变量、局部变量、标准JavaBean
黑马Java零基础视频教程精华部分_5_面向对象综合练习
黑马Java零基础视频教程精华部分_6_字符串
黑马Java零基础视频教程精华部分_7_ArrayList集合
黑马Java零基础视频教程精华部分_8_学生管理系统
黑马Java零基础视频教程精华部分_9_面向对象进阶(1)_static、继承
黑马Java零基础视频教程精华部分_10_面向对象进阶(2)_多态、包、final、权限修饰符、代码块
黑马Java零基础视频教程精华部分_11_面向对象进阶(3)_抽象类、接口、适配器
黑马Java零基础视频教程精华部分_12_面向对象进阶(4)_内部类


文章目录

  • 《黑马Java零基础视频教程精华部分》系列文章目录
  • 一、认识内部类
    • 1、什么是内部类?
    • 2、为什么要学习内部类?
  • 二、内部类分类:
  • 三、成员内部类
    • 1、书写位置
    • 2、如何创建成员内部类的对象
    • 3、成员内部类如何获取外部类的成员变量
  • 四、静态内部类(实则为成员内部类的一种)
    • 1、创建静态内部类对象的格式
    • 2、调用非静态方法的格式
    • 3、调用静态方法的格式
    • 4、注意事项
  • 五、局部内部类
  • 六、匿名内部类
    • 1、匿名内部类(的对象)格式的理解
    • 2、匿名内部类的使用
      • 接口多态
      • 直接链式调用方法
    • 3、位置
  • 七、
    • 1、
    • 2、
    • 3、
  • 八、
    • 1、
    • 2、
    • 3、


一、认识内部类

1、什么是内部类?

它是类的五大成员(属性、方法、构造方法、代码块、内部类)之一。
在一个类的里面,再定义一个类。举例:在A类的内部定义B类,B类就被称为内部类,如下图所示,Inner类就是内部类,Outer类就是外部类,他俩之外的其他类,统称为外部其他类
在这里插入图片描述
在这里插入图片描述

2、为什么要学习内部类?

在这里插入图片描述
在这里插入图片描述

二、内部类分类:

成员内部类
静态内部类
局部内部类
匿名内部类
前面三种我们几乎不会自己去写,一般在看源代码的时候才会看到,了解一下,以后源码碰到能看懂即可。

三、成员内部类

1、书写位置

成员内部类写在成员位置的,属于外部类的成员。
成员内部类可以被一些修饰符所修饰,比如:private,默认,protected,public,static(被static修饰的成员内部类变为静态内部类)等
在成员内部类里面,JDK16之前不能定义静态变量,JDK16开始才可以定义静态变量。
在这里插入图片描述

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

方式一:在外部类中编写方法,对外提供内部类的对象。
方式二:直接创建格式:外部类名.内部类名 对象名=外部类对象.内部类对象;范例:Outer.Inner oi =new Outer().new Inner();

3、成员内部类如何获取外部类的成员变量

在这里插入图片描述
内部类对象在堆中开辟的空间中保存了一个指向其外部类的地址,如下图所示。在输出Outer.this.a的时候会先找到Outer后面的this,其存的是001,再去地址为001的空间中找到a。
在这里插入图片描述

四、静态内部类(实则为成员内部类的一种)

静态内部类只能访问外部类中的静态变量和静态方法,如果想要访问非静态的需要创建对象。
在这里插入图片描述

1、创建静态内部类对象的格式

外部类名.内部类名 对象名 = new 外部类名.内部类名(); 比起非静态简单一点。

2、调用非静态方法的格式

先创建对象,用对象调用

3、调用静态方法的格式

外部类名.内部类名.方法名();

4、注意事项

(1)静态内部类也是成员内部类中的一种。
(2)静态内部类只能访问外部类中的静态变量和静态方法,如果想要访问非静态的需要创建外部类的对象。
在这里插入图片描述

五、局部内部类

1.将内部类定义在方法里面就叫做局部内部类,类似于方法里面的局部变量。
2.外界是无法直接使用局部内部类,需要在方法内部创建对象并使用。
3.该类可以直接访问外部类的成员,也可以访问方法内的局部变量。

六、匿名内部类

1、匿名内部类(的对象)格式的理解

在这里插入图片描述
匿名内部类顾名思义是一个没有名字的内部类,“没有名字”是针对我们程序员来说的,编译之后的字节码文件会由JDK给他自动编码上名字。如下图所示,Test$1.class就是Test.java的第一个匿名内部类,而Test$2.class是第二个匿名内部类。
在这里插入图片描述

为什么说是匿名内部类的对象呢,是因为用了new这个关键字,而new后面的类名或者接口名可以表明这个匿名内部类是继承了某个类或者实现了某个接口,后面大括号中的内容是类的内容,而这个类并没有名字,且最前面使用了new,所以说这是个对象。

2、匿名内部类的使用

使用场景:当方法的参数是接口或者类时以接口为例,匿名内部类可以传递这个接口的实现类对象。如果实现类只要使用一次,就可以用匿名内部类简化代码。
如果我想调用public static void method(Animal a){a.eat();},之前的方法我们需要使用多态,首先定义一个子类来继承Animal,再创建子类的对象作为参数,对method进行调用。现在我们只需如下图所示:传递的参数是一个匿名内部类,调用method方法时相当于Animal a = 子类对象即使用了多态。此时也需要满足编译看左边,运行看右边。
在这里插入图片描述

接口多态

在这里插入图片描述

直接链式调用方法

在这里插入图片描述

3、位置

可以写在成员位置,即成员匿名内部类(成员内部类的一种),也可以写在局部位置,即局部匿名内部类(局部内部类的一种)。

七、

1、

2、

3、

八、

1、

2、

3、

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

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

相关文章

【九】Hadoop3.3.4HA高可用配置

文章目录 1.高可用基本原理1.NameNode 高可用性主备 NameNodeJournalNode 2.Zookeeper 协调3.Quorum Journal Manager (QJM)4.Failover 控制器5.元数据共享6.检查点机制7.切换过程 2.Hadoop高可用配置1.环境背景2.hdfs-site.xml基本配置高可用配置 3.core-site.xml基本配置代理…

【C++】模版:范式编程、函数模板、类模板

目录 一.范式编程 二.函数模板 1.概念与格式 2.原理 3.实例化 4.匹配规则 三.类模板 一.范式编程 在写C函数重载的时候,可能会写很多同一类的函数,例如交换函数: void Swap(int& left, int& right) {int temp left;left r…

推荐 3款电脑上不可或缺的神仙软件,一用就再也离不开

WinForGIFSicle WinForGIFSicle是一款基于GIFSicle的可视化批量GIF压缩工具,具有多种功能和特点。首先,它是一个小巧、免费且开源的软件,能够有效地压缩GIF动画文件。该工具支持按比例压缩和按压缩比压缩两种模式,用户可以根据需要…

MySQL-分库分表

目录 介绍 问题分析 拆分策略 垂直拆分 垂直分库 垂直分表 水平拆分 水平分库 水平分表 实现技术 MyCat 介绍 目录 结构 入门 配置 schema.xml schema标签 datanode标签 datahost标签 rule.xml server.xml system标签 user标签 分片 垂直拆分 水平拆…

【QT】绘图API

目录 绘图API核心类 第一步:重写paintEvent事件函数 第二步:创建QPainter 第三步:设置QPainter绘制的文字类型(非必须) 第四步:设置画笔属性(线条) 第五步:设置画…

【复旦微FM33 MCU 外设开发指南】总集篇

各位好,这里是冷凝雨。 本系列旨在为复旦微的MCU提供全面的开发指南 以FM33LC0xx(Arm M0)为例,与现有的其余MCU型号,如FM33LG0xx、FM33M0xx等有许多相同之处。 本系列将侧重寄存器开发,分享一些各外设使用的…

线上静态的前端、nginx环境基础、基于域名的虚拟主机、基于ip的访问、部署nfs

一、环境基础: 1.查看文件(不要注释及空行) [root17dns ~]# grep -Ev "#|^$" /usr/local/nginx/conf/nginx.conf 2.备份源文件: [root17dns ~]# cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.con…

希尔排序, 插入排序, 冒泡排序, 选择排序【C++】

希尔排序&#xff0c; 插入排序&#xff0c; 冒泡排序&#xff0c; 选择排序 测试代码希尔排序选择排序冒泡排序插入排序 测试代码 #include <iostream> using namespace std;int main() {int arr[6] { 0 };int len sizeof(arr) / sizeof(int);for (int i 0; i < …

混合精度、异构计算——杂记

1、英伟达GPU架构 Figure 1 shows a full GA100 GPU with 128 SMs. The A100 is based on GA100 and has 108 SMs. SM是streaming multiprocessor的简写&#xff0c;4个处理单元组成一个SM&#xff0c;如Figure 2。 每个SM有64个INT32&#xff0c;64个FP32&#xff0c;32个F…

【Linux网络】网络层协议:IP

本篇博客整理了 TCP/IP 分层模型中网络层的 IP 协议&#xff0c;旨在让读者更加深入理解网络协议栈的设计和网络编程。 目录 一、网络层 二、IP 报头 1&#xff09;报头与有效载荷的分离 2&#xff09;有效载荷的上交 3&#xff09;源 IP 与目的 IP 4&#xff09;生存时间…

大模型学习笔记 - 大纲

LLM 大纲 LLM 大纲 1. LLM 模型架构 LLM 技术细节 - 注意力机制LLM 技术细节 - 位置编码 2. LLM 预训练3. LLM 指令微调 LLM 高效微调技术 4. LLM 人类对齐 LLM InstructGPTLLM PPO算法LLM DPO 算法 5. LLM 解码与部署6. LLM 模型LLaMA 系列7. LLM RAG 1. LLM 模型架构 大模…

奥特曼格斗进化0-3汉化版丨奈克瑟斯手机版,PC+安卓合集

今天小孩吵着要玩奈克瑟斯手机游戏&#xff0c;都是平时看那些游戏主播打这些游戏。 看着家里几千张奥特曼卡&#xff0c;脑壳就疼&#xff0c;索性还是闲鱼买了&#xff0c;因为我也没找到很全的。挨个找了个遍就不浪费时间了 百度网盘哈&#xff0c;也懒得转迅雷&#xff0c…

PXE——安装,配置,测试(rhel7环境下)

什么是PXE PXE&#xff08;Preboot eXecution Environment&#xff0c;预启动执行环境&#xff09;允许计算机在开机时从网络而非本地硬盘或其他存储设备启动。这种技术主要用于网络启动和自动化安装系统&#xff0c;尤其在需要为大量计算机同时安装操作系统的情况下非常有用。…

jupyter notebook安装

1.安装 pip install notebook 2.显示配置文件&#xff1a; jupyter notebook --generate-config 3.修改代码路径&#xff1a; 编辑配置文件C:\Users\a\.jupyterjupyter_notebook_config.py 4.运行 jupyter notebook 会自动弹出http://localhost:8888/tree

Elastic:IK分词器分词、停用词热更新如何配置-基于数据库

上一期&#xff0c;我们说明了基于API形式的热更新&#xff0c;但是API形式的热更新存在词库的管理不方便&#xff0c;要直接操作磁盘文件&#xff0c;检索页很麻烦&#xff1b;文件的读写没有专门的优化&#xff0c;性能不好&#xff1b;多一次接口调用和网络传输等缺点&#…

软件测试需要具备的基础知识【功能测试】---前端知识(一)

​ ​ 您好&#xff0c;我是程序员小羊&#xff01; 前言 为了更好的学习软件测试的相关技能&#xff0c;需要具备一定的基础知识。需要学习的基础知识包括&#xff1a; 1、计算机基础 2、前端知识 3、后端知识 4、软件测试理论 后期分四篇文章进行编写&#xff0c;这是第二篇 …

MongoDB未授权访问漏洞

开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,登录的用户可以通过默认端口无需密码对数据库任意操作&#xff08;增、删、改、查高危动作&#xff09;而且可以远程访问数据库。 漏洞原因 造成未授权访问的根本原因就在于启动 Mongodb 的时候未设置 --auth 也很少…

Node.js的下一代浏览器和移动自动化测试框架-WebdriverIO

在现代软件开发中&#xff0c;自动化测试已成为保障软件质量的关键环节。而在众多测试框架中&#xff0c;WebdriverIO凭借其强大的功能和简洁的语法&#xff0c;成为Node.js生态中备受瞩目的浏览器和移动自动化测试框架。那么&#xff0c;WebdriverIO究竟有哪些独特之处&#x…

Substance Painter材质制作原理

21 材质制作原理_哔哩哔哩_bilibili 颜色&#xff0c;纹理&#xff0c;高光 木头的制作 玻璃的制作 玻璃要给一定的金属度

指标一致化处理

什么是数据指标 数据指标有别于传统意义上的统计指标&#xff0c;它是通过对数据进行分析得到的一个汇总结果&#xff0c;是将业务单元精分和量化后的度量值&#xff0c;使得业务目标可描述、可度量、可拆解。 数据指标有哪些类型 极大型:期望取值越大越好&#xff1b; 极小…