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

《黑马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.rhkb.cn/news/392175.html

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

相关文章

IEEE Trans系列,超低自引率,沾边可收,截稿在即,版面有限!

关注GZH【欧亚科睿学术】,第一时间了解期刊最新动态! 👇 👇 👇 👇 这本IEEE Trans系列!指标优秀! IEEE-Trans系列期刊IEEE TRANSACTIONS ON INTELLIGENT VEHICLES (查看原文)…

详解直铺防静电瓷砖的特点与优势

防静电地板分为架空防静电地板和直铺防静电地板,直铺式防静电地板是一种直接铺设在地面上的地板系统,防静电瓷砖就是常用的直铺防静电地板之一。防静电瓷砖是在瓷砖烧制过程中加入防静电功能粉体进行物理改性,规格为600*600*10mm,…

前端常用的几个工具网站

觉得不错的前端工具类网站 1、Grid布局生成 https://cssgrid-generator.netlify.app 2、拟物按钮样式生成 https://neumorphism.io 3、玻璃形态效果 在线制作CSS玻璃形态 4、一些Button、checkBox、switch、card的css样式 零代码 - 精美CSS样式库 5、CSS阴影生成 在线创建…

学习c语言第二十天(自定义类型)

一、结构体 1.结构体声明 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.1结构体的声明 struct stu {char name[20];int age; }s1,s2;//s1,s2是struct stu 类型的变量,//可以不创建,在main函数里创建 …

进程的管理与控制详解:创建、终止、阻塞等待与非阻塞等待

目录 一、进程创建 1、实例 2、fork函数详解 (1)fork函数模板 (2). fork() 函数的工作原理 (3). fork() 返回值和错误处理 3、如何理解进程创建过程 二、进程终止 1、终止是在做什么? 2、进程终止,有三种情况 3、进程如何终止? 三…

【独家原创RIME-CNN-LSSVM】基于霜冰优化算法优化卷积神经网络(CNN)结合最小二乘向量机(LSSVM)的数据回归预测

【独家原创RIME-CNN-LSSVM】基于霜冰优化算法优化卷积神经网络(CNN)结合最小二乘向量机(LSSVM)的数据回归预测 目录 【独家原创RIME-CNN-LSSVM】基于霜冰优化算法优化卷积神经网络(CNN)结合最小二乘向量机(LSSVM)的数据回归预测效果一览基本介绍程序设计参考资料 效果一览 基本…

c->c++(四):gtest

本文主要探讨gtest相关内容。 gtest安装 wget -O gtest.zip https://github.com/google/googletest/archive/refs/heads/main.zipunzip gtest.zipcd googletest-mainmkdir bulid && cd buildcmake .. && make && make install gtest API TEST/TEST…

Redis02——缓存(缓存更新策略、缓存穿透、缓存雪崩、缓存击穿、缓存工具封装)

目录 缓存概念 添加Redis缓存 业务场景 缓存作用模型 java代码 缓存更新策略 主动更新的三种策略 主动更新——Cache Aside Pattern 实际应用 缓存穿透 概念 解决方法 实际应用 缓存雪崩 概念 解决方法 缓存击穿 互斥锁 介绍 实际应用 逻辑过期 介绍 实际…

基于Yolov8面部七种表情检测与识别C++模型部署

表情识别 七种表情识别是一个多学科交叉的研究领域,它结合了心理学、认知科学、计算机视觉和机器学习等学科的知识和技术。 基本概念 表情的定义:表情是人们在情绪体验时面部肌肉活动的结果,是人类情感交流的基本方式之一。基本表情理论&a…

使用Step Functions运行AWS Backup时必备的权限要点

引言 在尝试从Step Functions执行AWS Backup的按需备份时,我在权限方面遇到了一些困难。为了备忘,我将这些经验写成这篇文章。 概述 从Step Functions执行AWS Backup时,需要分配以下权限: AWS Backup相关权限 执行备份的权限…

Java: 线程安全问题的解决方案(synchronized)

发生原因 要想解决线程安全问题,那么我们首先得知道线程安全问题为什么会发生. 发生原因: 线程在操作系统中是"随机调度,抢占式执行的"[根本原因].多个线程,同时修改同一个变量修改操作不是"原子"的内存可见性问题指令重排序 解决方案 原因1和2,我们很…

04:【stm32】LED编程和按键控制

LED编程和按键控制 1、LED编程1.1、点亮一课LED灯 2、按键控制2.1、通过一个按钮控制LED灯的亮灭 1、LED编程 1.1、点亮一课LED灯 首先,我们想象一下,让LED灯点亮,引脚应该是输出模式,那么应该是通用模式,还是复用模式…

打靶记录7——Hacker_Kid-v1.0.1

靶机下载地址 https://download.vulnhub.com/hackerkid/Hacker_Kid-v1.0.1.ova难度 OSCP 风格的中级难度靶机(只需要获取root权限即可,CTF 风格的靶机就还需要获取flag) 涉及的攻击方法: 主机发现端口扫描Web信息收集DNS区域传…

Redis2-Redis常见命令

目录 Redis数据结构介绍 Redis通用命令 KEYS DEL EXISTS EXPIRE String类型 Key的层级格式 Hash类型 List类型 Set类型 SortedSet类型 Redis数据结构介绍 Redis是一个key-value的数据库,key一般是String数据库,value的类型多种多样 可以通过…

《Unity3D网络游戏实战》学习与实践--制作一款大乱斗游戏

角色类 基类Base Human是基础的角色类,它处理“操控角色”和“同步角色”的一些共有功能;CtrlHuman类代表“操控角色”​,它在BaseHuman类的基础上处理鼠标操控功能;SyncHuman类是“同步角色”类,它也继承自BaseHuman&…

解决电脑缺少.NET组件?手把手教你轻松解决

在日常使用电脑的过程中,很多用户可能会遇到“电脑缺少.NET组件”的提示,这可能导致某些应用程序无法正常运行或安装。那么,.NET组件到底是什么?为何它如此重要?本文将为您详细解答这些问题,并提供有效的解…

[ACM MM 2024] Wave-Mamba:超高清暗光图像增强的小波状态空间模型

Wave-Mamba: Wavelet State Space Model for Ultra-High-Definition Low-Light Image Enhancement (arxiv.org) Wave-Mamba是一种用于增强超高清低光照图像的新模型,它引入了低频状态空间块和高频增强块,并取得了领先水平的性能。该模型即将开源&#x…

用Python插入表格到PowerPoint演示文稿

有效的信息传达是演示文稿中的重点,而PowerPoint演示文稿作为最广泛使用的演示工具之一,提供了丰富的功能来帮助演讲者实现这一目标。其中,在演示文稿中插入表格可以帮助观众更直观地理解数据和比较信息。通过使用Python这样的强大编程语言&a…

【STL】 vector的底层实现

1.vector的模拟代码完整实现&#xff08;后面会拆分开一个一个细讲&#xff09; #pragma once #include<assert.h>// 抓重点namespace bit {/*template<class T>class vector{public:typedef T* iterator;private:T* _a;size_t _size;size_t _capacity;};*/templa…

Python(模块)

模块编写完成就可以被其他模块进行调用并使用被调用模块的功能。 import导入方式的语法结构&#xff1a; import模块名称【as别名】 from……import导入方式的语法结构&#xff1a; from模块名称&#xff0c;import变量/函数/类/*&#xff08;*是通配符&#xff09; impor…