当前位置: 首页 > news >正文

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.复制加密密码&#xff0c;在线解密 代码在线运行 - 在线工具 php解密代码 <?php class NavicatPassword {protected $version 0;protected $aesKey libcckeylibcckey;protected…...

企业管理必备:学会寻找客户绝佳方法。

无论是日常沟通、工作交流&#xff0c;还是社交娱乐&#xff0c;微信都扮演着重要的角色。而在微信的使用过程中&#xff0c;添加好友是一项基本而重要的操作&#xff0c;但是您真的会添加微信好友吗&#xff1f; 试试这个神器——微信管理系统&#xff0c;下面分享它快速加客…...

昇思25天学习打卡营第29天 | 文本解码原理--以MindNLP为例

今天是29天&#xff0c;学习了文本解码原理--以MindNLP为例。 MindNLP 是一个基于 MindSpore 的开源自然语言处理&#xff08;NLP&#xff09;库。它具有以下特点&#xff1a; 支持多种 NLP 任务&#xff1a;如语言模型、机器翻译、问答、情感分析、序列标记、摘要等&#xff…...

元服务体验-服务发现

服务发现&#xff0c;无论线上或线下的方式都可以发现元服务。 线上&#xff1a;基于用户意图。从精准意图的搜索、用户事件触发的推荐到主动探索等场景。用户可以在设备的负一屏、全局搜索、应用市场、桌面等场景发现元服务。 线下&#xff1a;用户在 HarmonyOS Connect标签…...

设计模式学习(二)工厂模式——抽象工厂模式+注册表

设计模式学习&#xff08;二&#xff09;工厂模式——抽象工厂模式注册表 前言使用简单工厂改进使用注册表改进参考文章 前言 在上一篇文章中我们提到了抽象工厂模式初版代码的一些缺点&#xff1a;①客户端违反开闭原则②提供方违反开闭原则。本文将针对这两点进行讨论 使用…...

同三维T80004解码器视频使用操作说明书:高清HDMI解码器,高清SDI解码器,4K超清HDMI解码器,双路4K超高清解码器

同三维T80004解码器视频使用操作说明书&#xff1a;高清HDMI解码器&#xff0c;高清SDI解码器&#xff0c;4K超清HDMI解码器&#xff0c;双路4K超高清解码器 同三维T80004解码器系列视频使用操作说明书&#xff1a;高清HDMI解码器&#xff0c;高清SDI解码器&#xff0c;4K超清H…...

Flutter应用开发:掌握StatefulWidget的实用技巧

前言 随着移动应用的日益复杂&#xff0c;状态管理成为了 Flutter 应用开发中的一项重要挑战。 状态&#xff0c;即应用中的可变数据&#xff0c;它驱动着用户界面的渲染和交互。 在 Flutter 这样的声明式 UI 框架中&#xff0c;如何高效、可维护地管理状态&#xff0c;对于…...

SCADA系统在哪些行业中取得了不斐的成绩!

随着技术的发展&#xff0c;SCADA系统已经历了多代的发展。从基于专用计算机和专用操作系统的第一代SCADA系统&#xff0c;到基于通用计算机和通用操作系统的第二代&#xff0c;再到按照开放原则基于分布式计算机网络以及关系数据库技术的第三代&#xff0c;以及现在基于更高技…...

layui 监听弹窗关闭并刷新父级table

记录&#xff1a;easyadmin 监听弹窗关闭并刷新父级table 场景一&#xff1a;在二级页面的table中点击编辑&#xff0c;保存后刷新二级页面的table edit: function () {ea.listen(function (data) {return data;}, function (res) {ea.msg.success(res.msg, function () {var …...

Webpack详解

Webpack Webpack 是一个现代 JavaScript 应用程序的静态模块打包器&#xff08;module bundler&#xff09;。它允许开发者将项目中的资源&#xff08;如 JavaScript、CSS、图片等&#xff09;视为模块&#xff0c;通过分析和处理这些模块之间的依赖关系&#xff0c;将它们打包…...

杰发科技AC7801 —— __attribute__指定地址存储常量

const uint8_t usFlashInitVal[] __attribute__((at(0x08002800))) {0x55,0x55,0x55,0x55,0x55};//定位在flash中&#xff0c;0x00030000开始的6个字节信息固定 注意7801的地址在8000000之后 如地址选0x00000800烧录时候报错 不知道是不是atclinktool的bug&#xff0c;使用_…...

docker pull 不下来 还是走代理好啊

docker国内镜像源配置及走代理设置_docker 镜像代理-CSDN博客 docker命令走代理 实际测试下来&#xff0c;就算我们修改成功了国内的镜像源&#xff0c;有时候由于国内镜像更新不及时&#xff0c;或者需要拉取的镜像比较冷门&#xff0c;只有域外镜像站才有&#xff0c;那么我…...

Java Scanner 类

Scanner 类是 Java 中用于读取用户输入的方便工具&#xff0c;它可以从各种数据源&#xff08;如标准输入流、文件、字符串等&#xff09;中读取基本类型和字符串。Scanner 类位于 java.util 包中&#xff0c;通常用于从键盘获取用户输入数据。 ### 主要功能和用法 1. **创建…...

OceanBase:引领下一代分布式数据库技术的前沿

OceanBase的基本概念 定义和特点 OceanBase是一款由蚂蚁金服开发的分布式关系数据库系统&#xff0c;旨在提供高性能、高可用性和强一致性的数据库服务。它结合了关系数据库和分布式系统的优势&#xff0c;适用于大规模数据处理和高并发业务场景。其核心特点包括&#xff1a; …...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...