Java —— 内部类
Java内部类
1.什么是内部类?
将一个类A定义在另一个类B里面,里面的类A就称为内部类(InnerClass),类B则称为外部类(OuterClass)。
2.为什么需要内部类?
具体来说,当一个事物A的内部,还有一个部分需要一个完整的结构B进行描述,
而这个完整的结构B又只为外部事物A提供服务,不在其他地方单独使用,
那么这个内部的完整的结构B最好使用内部类。
3.内部类使用举例
- Thread类内部声明了State类(只有Thread用,其他类不用),表示线程的生命周期
- HashMap类中声明了Node类(只有HashMap用,设计在内部,内部类),表示封装的key和value
4.内部类的分类(参考变量的分类)
-
成员内部类:直接声明在外部类的里面
- 使用static修饰的:静态的成员内部类
- 不使用static修饰的:非静态的成员内部类
-
局部内部类:声明在方法内,构造器内,代码块内的内部类
- 匿名的局部内部类
- 非匿名的局部内部类
5.内部类需要理解的知识
- 成员内部类(常用)的理解
- 如何创建成员内部类的实例
- 如何在成员内部类中调用外部类的结构
- 局部内部类的基本使用
6.关于成员内部类的理解
-
从类的角度看
内部可以声明属性、方法、构造器、代码块、内部类等结构
此内部类可以声明父类、可以实现接口
可以使用final修饰(此内部类不能再有子类)
可以使用abstract修饰
-
从外部类的成员的角度看(似成员变量)
在内部可以调用外部类的结构。如属性、方法等
除了使用public、缺省权限修饰之外,还可以使用private、protected修饰(似成员变量)
可以使用static修饰
7.关于局部内部类的说明
直接在方法内声明类、抽象类、接口的实现类,体现匿名实现类、匿名对象。
局部内部类:声明在方法内,构造器内,代码块内的内部类
- 匿名的局部内部类
- 非匿名的局部内部类
public class OuterClassTest2 {public static void main(String[] args) {//接口类A:标准写法SubA a = new SubA();a.method();//举例1:提供接口匿名实现类的对象A a1 = new A(){@Overridepublic void method() {System.out.println("接口匿名实现类重写的方法method()");}};a1.method();//举例2:提供接口匿名实现类的匿名对象new A(){@Overridepublic void method() {System.out.println("接口匿名实现类重写的方法method()");}}.method();System.out.println("----------------------------------------------------");//抽象类B:标准写法SubB s1 = new SubB();s1.method1();//举例1:继承于抽象类的匿名子类的对象 类名:OuterClassTest2$3B b = new B(){@Overridepublic void method1() { //实现抽象方法System.out.println("继承于抽象类的子类调用的方法1");}};b.method1();System.out.println("b.getClass() = " + b.getClass()); //b.getClass() = class com.atguigu09.inner.OuterClassTest2$3System.out.println("b.getClass().getSuperclass() = " + b.getClass().getSuperclass()); //b.getClass().getSuperclass() = class com.atguigu09.inner.B//举例2:new B(){@Overridepublic void method1() { //重写抽象方法System.out.println("继承于抽象类的匿名子类调用的方法1");}}.method1();System.out.println("----------------------------------------------------------");//普通类C:标准写法C c = new C();c.method2();System.out.println("c.getClass() = " + c.getClass());System.out.println("c.getClass().getSuperclass() = " + c.getClass().getSuperclass());//举例1:提供了一个继承于C的匿名子类的对象C c1 = new C(){};//没有重写method2()c1.method2();System.out.println("c1.getClass() = " + c1.getClass());System.out.println("c1.getClass().getSuperclass() = " + c1.getClass().getSuperclass());//举例2:提供继承于C的匿名子类的匿名对象new C(){@Overridepublic void method2() { //重写method2()System.out.println("重写C");}}.method2();}
}//接口A
interface A{public void method();
}//抽象类B
abstract class B{public abstract void method1();
}//普通类C
class C{public void method2(){System.out.println("C");}
}//实现类已知,非匿名,对应标准写法
class SubA implements A{@Overridepublic void method() {System.out.println("接口A的方法实现");}
}//子类已知,非匿名,对应标准写法
class SubB extends B{@Overridepublic void method1() {System.out.println("抽象B的方法实现");}
}相关文章:
Java —— 内部类
Java内部类 1.什么是内部类? 将一个类A定义在另一个类B里面,里面的类A就称为内部类(InnerClass),类B则称为外部类(OuterClass)。 2.为什么需要内部类? 具体来说,当一…...
高职院校人工智能人才培养成果导向系统构建、实施要点与评量方法
一、引言 近年来,人工智能技术在全球范围内迅速发展,对各行各业产生了深远的影响。高职院校作为培养高技能人才的重要基地,肩负着培养人工智能领域专业人才的重任。为了适应社会对人工智能人才的需求,高职院校需要构建一套科学、…...
ffmpeg中的超时控制
在FFmpeg库中,很多函数没有直接的参数可以设置超时。 那么有哪些函数可以通过设置 AVFormatContext 的 interrupt_callback 来实现超时控制? avformat_open_input: 打开输入文件或流。这个函数会阻塞,尤其是在网络流的情况下&…...
搜维尔科技:【研究】触觉技术将在5年内以8种方式改变人们的世界
触觉技术在过去几年中发展迅猛,大大提高了反馈的精确度和真实度。其应用产生了真正的影响,数百家公司和企业都集成了触觉技术来增强培训和研究模拟。 虽然触觉技术主要用于 B2B 层面,但触觉技术可能会彻底改变我们的生活,尤其是通…...
项目收获总结--MyBatis的知识收获
MyBatis的知识收获 一、概述二、获取自动生成的(主)键值三、将sql执行结果封装为目标返回对象的方式和原理四、延迟加载实现原理五、批量插入六、自带分页与分页插件原理七、Mapper(Dao)接口与XML映射文件关系八、模糊查询like语句九、#{}和${}的区别十、二级缓存案例实战 一、…...
数据库管理-第221期 Oracle的高可用-04(20240717)
数据库管理221期 2024-07-17 数据库管理-第221期 Oracle的高可用-04(20240717)1 ADG2 连接配置2.1 TNS2.2 JDBC2.3 JAVA连接池2.3.1 Oracle UCP2.3.2 应用连接池基础配置 总结 数据库管理-第221期 Oracle的高可用-04(20240717) 作…...
navicat15已连接忘记密码
1.导出链接 2.使用文本打开 connections.ncx UserName"root" PasswordXXXX 3.复制加密密码,在线解密 代码在线运行 - 在线工具 php解密代码 <?php class NavicatPassword {protected $version 0;protected $aesKey libcckeylibcckey;protected…...
企业管理必备:学会寻找客户绝佳方法。
无论是日常沟通、工作交流,还是社交娱乐,微信都扮演着重要的角色。而在微信的使用过程中,添加好友是一项基本而重要的操作,但是您真的会添加微信好友吗? 试试这个神器——微信管理系统,下面分享它快速加客…...
昇思25天学习打卡营第29天 | 文本解码原理--以MindNLP为例
今天是29天,学习了文本解码原理--以MindNLP为例。 MindNLP 是一个基于 MindSpore 的开源自然语言处理(NLP)库。它具有以下特点: 支持多种 NLP 任务:如语言模型、机器翻译、问答、情感分析、序列标记、摘要等ÿ…...
元服务体验-服务发现
服务发现,无论线上或线下的方式都可以发现元服务。 线上:基于用户意图。从精准意图的搜索、用户事件触发的推荐到主动探索等场景。用户可以在设备的负一屏、全局搜索、应用市场、桌面等场景发现元服务。 线下:用户在 HarmonyOS Connect标签…...
设计模式学习(二)工厂模式——抽象工厂模式+注册表
设计模式学习(二)工厂模式——抽象工厂模式注册表 前言使用简单工厂改进使用注册表改进参考文章 前言 在上一篇文章中我们提到了抽象工厂模式初版代码的一些缺点:①客户端违反开闭原则②提供方违反开闭原则。本文将针对这两点进行讨论 使用…...
同三维T80004解码器视频使用操作说明书:高清HDMI解码器,高清SDI解码器,4K超清HDMI解码器,双路4K超高清解码器
同三维T80004解码器视频使用操作说明书:高清HDMI解码器,高清SDI解码器,4K超清HDMI解码器,双路4K超高清解码器 同三维T80004解码器系列视频使用操作说明书:高清HDMI解码器,高清SDI解码器,4K超清H…...
Flutter应用开发:掌握StatefulWidget的实用技巧
前言 随着移动应用的日益复杂,状态管理成为了 Flutter 应用开发中的一项重要挑战。 状态,即应用中的可变数据,它驱动着用户界面的渲染和交互。 在 Flutter 这样的声明式 UI 框架中,如何高效、可维护地管理状态,对于…...
SCADA系统在哪些行业中取得了不斐的成绩!
随着技术的发展,SCADA系统已经历了多代的发展。从基于专用计算机和专用操作系统的第一代SCADA系统,到基于通用计算机和通用操作系统的第二代,再到按照开放原则基于分布式计算机网络以及关系数据库技术的第三代,以及现在基于更高技…...
layui 监听弹窗关闭并刷新父级table
记录:easyadmin 监听弹窗关闭并刷新父级table 场景一:在二级页面的table中点击编辑,保存后刷新二级页面的table edit: function () {ea.listen(function (data) {return data;}, function (res) {ea.msg.success(res.msg, function () {var …...
Webpack详解
Webpack Webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。它允许开发者将项目中的资源(如 JavaScript、CSS、图片等)视为模块,通过分析和处理这些模块之间的依赖关系,将它们打包…...
杰发科技AC7801 —— __attribute__指定地址存储常量
const uint8_t usFlashInitVal[] __attribute__((at(0x08002800))) {0x55,0x55,0x55,0x55,0x55};//定位在flash中,0x00030000开始的6个字节信息固定 注意7801的地址在8000000之后 如地址选0x00000800烧录时候报错 不知道是不是atclinktool的bug,使用_…...
docker pull 不下来 还是走代理好啊
docker国内镜像源配置及走代理设置_docker 镜像代理-CSDN博客 docker命令走代理 实际测试下来,就算我们修改成功了国内的镜像源,有时候由于国内镜像更新不及时,或者需要拉取的镜像比较冷门,只有域外镜像站才有,那么我…...
Java Scanner 类
Scanner 类是 Java 中用于读取用户输入的方便工具,它可以从各种数据源(如标准输入流、文件、字符串等)中读取基本类型和字符串。Scanner 类位于 java.util 包中,通常用于从键盘获取用户输入数据。 ### 主要功能和用法 1. **创建…...
OceanBase:引领下一代分布式数据库技术的前沿
OceanBase的基本概念 定义和特点 OceanBase是一款由蚂蚁金服开发的分布式关系数据库系统,旨在提供高性能、高可用性和强一致性的数据库服务。它结合了关系数据库和分布式系统的优势,适用于大规模数据处理和高并发业务场景。其核心特点包括: …...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
