Java的内部类详解(成员内部类、静态内部类、局部内部类、匿名内部类)

news2024/9/21 20:35:41

Java知识点总结:想看的可以从这里进入

目录

        • 2.2.4、 内部类
          • 1、成员内部类
          • 2、静态内部类
          • 3、局部内部类
          • 4、匿名内部类

2.2.4、 内部类

一个类定义在另一个类内,那么这个类就是一个内部类,比如:在类A中定义一个类B,B就是内部类,而B可以当做A的一个成员看待。从种类上说,内部类可以分为四类:成员内部类、静态内部类、匿名内部类、局部内部类。

image-20220724161134268

1、成员内部类

成员内部类:最普通的一种内部类,定义在类中方法外的一个普通的类(没有static修饰),可用任意的修饰符修饰

  • 内部类可以访问外部类所有的属性和方法(包括私有)。但是外部类要访问成员内部类的属性和方法,必须要先实例化内部类

    image-20230202204614229
  • 在其他的类中使用内部类时,需要先有外部类的对象(成员内部类是依附外部类而存在的)

    image-20230203152306776
  • 关于在成员内部类中使用静态方法和属性的问题: 关于JDK16后可以在非静态内部类中使用静态属性和方法的说明

    • 在 jdk16之前的版本,不能再非静态成员内部类中定义静态的属性和方法

      image-20230203153900340
    • 在 jdk Java16之后的版本是可以定义静态方法和属性的

      image-20230203153246101
  • 当外部类变量与方法和内部类的同名时,内部类默认访问自己的成员变量或方法,而要引用外部变量时要加类名.this(类名.this.变量名、类名.this.方法名())

    image-20230202211913116
2、静态内部类

静态内部类:静态内部类就是在成员内部类加了一个 static 关键字,静态内部类就像外部类的一个静态成员一样

  • 静态内部类不能直接访问外部类的非静态成员,但可以通过创建外部类的对象访问

    image-20230203155334889
  • 外部类的静态成员与内部类的成员名称相同,可通过(类名.静态成员) 访问外部类的静态成员

    image-20230203155654587
  • 静态内部类创建对象无需依赖外部类,可以直接创建

    image-20230203155915238
3、局部内部类

局部内部类:使用的比较少,声明在方法体或一段代码块的内部。

  • 仅在定义的方法、代码块内部使用,其他地方无法使用(定义在方法内则只能在方法中使用,定义在for循环中则只能在for循环中使用),作用范围类似于局部变量

  • 局部内部类不可使用权限修饰符 静态(static)修饰符进行修,但可以使用final 或 abstract修饰。

    image-20230203160225947
  • 局部内部类可以直接访问方法中的属性

  • 局部内部类创建对象要在方法内部、局部内部类的外部声明。

    image-20230203160730189
  • 可以访问外部类的的属性和方法(包括私有的)。

    image-20230203161055270
4、匿名内部类

匿名内部类:很常用。它是一种没有名字的内部类,只能使用一次,通常是某个类在实现时只会使用一次,所以为了简化,不需要去专门写一个实现类,而是直接使用内部类完成。

  • 匿名内部类不能定义任何静态成员、方法和类,只能创建匿名内部类的一个实例。一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
  • 在匿名内部类中可以使用外部类的属性,但是外部类却不能使用匿名内部类中定义的属性,匿名内部类没有名字,因此在外部类中无法获取这个类的类名,也就无法得到属性信息。(只能有一个对象)
  • 匿名内部类必须继承父类或实现接口,使用多态形式引用
new 接口/类名(参数1, 参数2...){
    实现方法1(){
        
    }
    实现方法2(){
        
    }
    ......
};

在线程的时候通常就喜欢使用匿名内部类实现

image-20220724171746400

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

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

相关文章

英特尔锐炫秒杀RTX 3060,XeSS现已支持超过35款游戏!

一款显卡的性能可以达到什么程度?除了架构、规格等硬件因素,驱动的优化程度同样至关重要。Intel携带Arc锐炫回归独立显卡市场,作为“后起之秀”,驱动的优劣更是关键中的关键。Intel也正是这么做的。2022年6月,Intel正式…

2023 NFT防骗指南:六大骗局,3招带你远离…

网上流传着一句:币圈一天,人间一年。在刚刚过去的农历新年,一直低迷的加密领域迎来了“短暂性复苏”,加密市场总市值重回万亿美元。 同时复苏的还有NFT市场,据欧科云链OKLink链上数据显示,2023年1月份的NFT…

计算机网络-http协议版本对比

概述 HTTP 是基于 TCP/IP 协议的一个应用层协议,是现代互联网的一个基础协议。规定了客户端与服务端之间的通信格式以及所占用的服务端口80(HTTPS是443)。 超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响…

【Flutter】Flutter Developer 101 入门小册 专栏指引

你好,我是小雨青年,一名程序员。 在2023年,我决定做这个Flutter专栏,从基础到部署,一站式解决大家对于Fulltter的学习需求。 目前本专栏的大概目录为本文最后所示,后续随着内容的不断更新,会逐…

2023年“华数杯”国际大学生数学建模B题赛题发布

ICM 问题B:社会稳定早期预警研究 背景 人类和所有的动物一样,都有寻求利益和避免伤害的本能。人类成为创造之主 的关键在于,他们比其他动物更善于避免伤害。危机总是潜伏着未来。人类发展的 历史是一部不断尝试超越危机的历史 (严耀军&#x…

鸿蒙开发学习|基础环境和开发工具

系列文章目录 第一章 HarmonyOS是什么 第二章 基础环境和开发工具 文章目录系列文章目录前言一、DevEco Studio工具简介二、DevEco Studio搭建开发流程1.运行环境要求2.下载和安装DevEco Studio三、安装HarmonyOS开发插件总结前言 HUAWEI DevEco Studio是基于IntelliJ IDEA C…

三阶魔方七步还原法公式备忘录

魔方公式备忘 转动符号图解 魔方七步公式: 1.底面十字还原 2.底角还原 3.中间层还原 上棱到左棱 U’L’U’LUFUF’ 上棱到右棱 URUR’U’F’U’F 4.顶面十字 循环做FRUR’U’F’直到出现十字 5.顶面还原(小鱼公式) 左手 L’U’LU’L’U’2L …

2、Maven——IDEA与eclipse(MyEclipse)创建工程的区别、Maven创建基本java工程

目录 一、IDEA与eclipse创建工程的区别 二、IDEA创建多个工程 1、 创建空工程:Empty Project 2、创建Module 三、Maven创建基本java工程 1、pom.xml 2、依赖坐标的使用 3、远程Maven仓库 4、Maven项目框架 (1) main目录 &#xff…

MySQL之主从复制集群搭建

简述 这篇文章主要记录使用docker compose搭建MySQL主从复制集群搭建,方便后续进行本地测试开发。 这篇文章主要介绍一主一从的搭建过程。 主从架构,可以缓解MySQL的数据存储以及访问的压力。 一. 主从复制原理 原理图如下: 步骤&#xf…

AVL平衡树(Java实现)

概念 AVL树可以定义为高度平衡二叉搜索树,其中每个节点与平衡因子相关联,该平衡因子通过从其左子树的子树中减去其右子树的高度来计算。AVL树是由GM Adelson - Velsky和EM Landis于1962年发明的。为了纪念其发明者,这树结构被命名为AVL。 定…

Android集成Unity

前言 随着前两年元宇宙的提出,虚拟现实开始在各大平台大展身手。各个平台都开始搭上了元宇宙的列车,Unity作为虚拟引擎中的热门,渲染效果和开发效率极其出色;Android作为移动开发的巨头之一也搭上了元宇宙这趟列车。今天&#xf…

图像基础概念

加解串器图像相关的概念:相关的概念:一个像素时钟可以产生两个像素可以通过调大frame freelance或vts来增大 V blinking sensor的基本配置曝光:一行一行进行曝光:每一行曝光时间 非常短 从第一行到最后一行为有效时间同步信号:同步信号的处理同步曝光的需求:曝光的…

IoU Loss综述(IOU,GIOU,CIOU,EIOU,SIOU,WIOU)

边界框回归(BBR)的损失函数对于目标检测至关重要。它的良好定义将为模型带来显著的性能改进。大多数现有的工作假设训练数据中的样本是高质量的,并侧重于增强BBR损失的拟合能力。 一、L2-norm 最初的基于回归的BBR损失定义为L2-norm&#xf…

IIS隐藏敏感数据信息

安装URL Rewrite web.config: 想要隐藏Server和X-AspNet-Version 两项 <system.webServer>节点添加子节点rewrite <system.webServer> <rewrite> <outboundRules> <rule name"REMOVE_RESPONSE_SERVER"> …

python3+requests:接口自动化测试(二)

前言&#xff1a;上篇文章python3requestsunittest&#xff1a;接口自动化测试&#xff08;一&#xff09;&#xff1a;python3requestsunittest&#xff1a;接口自动化测试&#xff08;一&#xff09; - Shapelei - 博客园 &#xff0c;已经介绍了基于unittest框架的实现接口自…

在Spring Boot中整合Katharsis,来快速开发JSON API的Web应用

1 简介 我们进行Web API开发的时候&#xff0c;经常会使用Json格式的消息体&#xff0c;而Json格式非常灵活&#xff0c;不同的人会有不同的设计风格和实现&#xff0c;而JSON API提供了一套标准。但它并不提供直接实现。 Katharsis是JSON API的Java实现&#xff0c;使用它可…

canal env create (mysql -> kafka)

&#xff08;1&#xff09;获取资源及解压 选定安装路径 cd /home下载canal.admin wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.admin-1.1.5.tar.gz解压canal-admin mkdir canal-admin tar -zxvf canal.admin-1.1.5.tar.gz -C canal-adm…

Nginx服务器上安装SSL证书

Nginx服务器上安装SSL证书1、前提条件2、nginx安装http_ssl_module模块2.1 查看是否安装过http_ssl_module2.2 进入nginx源文件目录2.3 重新编译nginx2.4 用新的nginx覆盖旧的3、https配置(SSL证书安装)3.1 下载证书文件和密钥文件3.2 服务器上创建cert文件夹3.3 配置nginx.con…

2023年中级计算机软考怎么报考呢?软考证书有用吗?

计算机软考简称软考&#xff0c;全称计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff0c;是由人力资源和社会保障部&#xff08;原人事部&#xff09;、工业和信息化部&#xff08;原信息产业部&#xff09;领导的国家级考试&#xff0c;其目的是&#…

C++——stack和queue的介绍和使用

文章目录1. stack的介绍和使用1.1 stack的介绍1.2 stack的使用1.3 几个比较经典的oj题2. queue的介绍和使用2.1 queue的介绍2.2 queue的使用3. 容器适配器3.1 什么是适配器3.2 STL标准库中stack和queue的底层结构3.3 deque的简单介绍(简单介绍)3.3.1 deque的原理介绍3.3.2 dequ…