Java匿名内部类

news2025/1/21 0:48:22

J a v a 匿 名 内 部 类 \huge{Java匿名内部类} Java

匿名内部类

①. 概念(定义)

通俗一点来讲匿名内部类就是没有名字的局部内部类
注意这里的两点:

  1. 没有名字
  2. 局部内部类

②. 作用

方便创建子类的对象,最终的目的是简化代码的编写。

具体方便再哪里呢?
比方说有一个方法进行调用的时候需要传入一个对象作为参数,这个时候就需要首先写一个类,然后创建一个对象,之后再把对象传进去一共三步。非常麻烦,但是匿名内部类就支持直接将这个类创建在参数中,并且这个类创建了之后直接生成一个对象,就相当于传入了一个对象,省去了大量的繁琐步骤。

③. 格式

在这里插入图片描述

Employee a = new Emloyee(){
	//匿名内部类的类的结构体
	public void work(){
	
	}
}

④. ❗❗特征

这两个特征非常的重要:

  1. 匿名内部类是一个没有名字的内部类,同时也代表一个对象,或者换句话说匿名内部类定义之后会产生一个相应类型的对象!(这就是为什么传递参数的时候直接定义匿名内部类就可以了不用重新创建对象了)
  2. 匿名内部类产生的对象类型,相当于是当前new的那个类型的子类类型。
    示例:
public class Test {
    public static void main(String[] args) {
        Animal a = new Animal(){
        	//匿名内部类定义
            @Override
            public void run() {
                System.out.println("老虎跑的块~~~");
            }
        };
        a.run();
    }
}

//抽象类
abstract class Animal{
    public abstract void run();
}

上面代码借助下面的抽象类Animal进行定义匿名内部类,这行代码:

 Animal a = new Animal(){

右边写的是Animal类,但是实际上a真正的类型就是Animal类吗?
一定不是!
因为Animal是抽象类,一定不可以产生对象!!!!
❗❗❗所以匿名内部类所产生的对象,一定不是new的类型的对象,但是这个类又可以直接赋值给new类型的对象(左边),这个对象只能是new类型的子类对象!

⑤. 常见用途

匿名内部类就是作为一个对象,直接传输给方法的。
示例:

//实现原理
//有一个游泳接口,还有一个Swimming方法,需要让老师、学生、运动员去使用Swimming方法进行游泳
//但是不想创建一个学生对象、一个老师对象、一个运动员对象之后在分别进行调用,实在是麻烦
//直接使用匿名内部类,在创建对象的时候直接创建不同的匿名内部类,然后分别重写swim方法即可
public class Test2 {
    public static void main(String[] args) {
    	
    	//学生的匿名内部类
        Swimming s = new Swimming() {
            @Override
            public void swim() {
                System.out.println("学生快乐的自由泳🏊‍");
            }
        };
        go(s);
		
		
        System.out.println("--------------");

		//老师的匿名内部类
        Swimming s1 = new Swimming() {
            @Override
            public void swim() {
                System.out.println("老师泳🏊的贼快~~~~~");
            }
        };
        go(s1);

        System.out.println("--------------");


		//运动员的匿名内部类
        go(new Swimming() {
            @Override
            public void swim() {
                System.out.println("运动员🏊的贼快啊~~~~~");
            }
        });


    }

    /**
       学生 老师 运动员可以一起参加游泳比赛
     */
    public static void go(Swimming s){
        System.out.println("开始。。。");
        s.swim();
        System.out.println("结束。。。");
    }
}


//定义一个游泳接口,所有实现了该接口的人都要会游泳!
interface Swimming{
    void swim();
}

从上面的代码可以看出来,匿名内部类创建出来大多是就是为了当前的立刻使用能比较方便。

⑥. 总结

匿名内部类,没有名字,基本就是创建出来为了当调用方法的参数,创建出来的类属于new类型对应的子类,并且匿名内部类定义之后就会产生一个相应类型的对象,匿名内部类的使用目的就是简化代码。

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

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

相关文章

Linux内核Hook系统调用execve

在Linux系统中,用户层程序无法直接控制系统内核,只能通过系统调用。 一般调用顺序为: 用户进程->execve()->syscall()->stub_execve()->sys_execve()-> do_execve()..... 本文章使用的是国产uos-Linux,内核为 4.19.0-amd64-…

数组实现单链表和双链表

全文目录😀 数组实现的优势🤔 单链表😕 初始化😕 头插😕 在下标 k 后面插入元素😕 删除下标 k 后面的元素😕 遍历😵‍💫 双链表🤨 初始化🤨 插入&…

利用Python自制一个批量图片水印添加器

前段时间写了个比较简单的批量水印添加的python实现方式,将某个文件夹下面的图片全部添加上水印。 今天正好有时间就做了一个UI应用的封装,这样不需要知道python直接下载exe的应用程序使用即可。 下面主要来介绍一下实现过程。 首先,还是老…

WebDAV之葫芦儿·派盘 + PDF Expert

PDF Expert 支持WebDAV方式连接葫芦儿派盘。 推荐一款备受称赞的PDF阅读工具PDF Expert,一款超简单的PDF编辑器。 PDF Expert是一款macOS上的办公软件,它具有专业的PDF编辑功能,可以快速从邮件、网页支持PDF打开,支持用户进行阅读、批注等功能,用户可以直接在PDF上进行…

机器学习10线性回归法Linear Regression

文章目录一、线性回归算法简介二、简单线性回归的实现三、向量化运算四、衡量线性回归法的指标,MSE,RMS,MAEMSE均方误差(Mean Squared Error)RSE均方误差(Root Mean Squared Error)平均绝对误差MAE(Mean Ab…

在职场,如何克服拖延症?

在职场,你遇见过这样的情况吗:领导让你写一份方案,你一拖再拖,直到最后一天才打开电脑。 这就是拖延症的表现。很多人做一件事常常拖到截止时间的临界点,才被压力所迫开始做事。 也有的人是因为觉得自己解决不了事情&…

PXE + Kickstart 服务器批量安装Linux系统

一、无人值守安装服务 使用光盘镜像来安装Linux系统的方法,该方法适用于只安装少量Linux系统的情况。如果生产环境中有数百台服务器都需要安装系统,这种方式就不合时宜了。这时,我们就需要使用PXE + TFTP +HTTP + DHCP + Kickstart服务搭建出一个无人值守安装系统。这种无人…

vue中提示框 this.$confirm如何让提示框换行

let confirmText [案件号为response.businessInformation.claimNo, 点击确认跳转到查勘继续操作该案件,点击取消跳转到新建赔案查询页面] const newDatas [] const h this.$createElement for (const i in confirmText) { newDatas.pu…

「Whale 帷幄」SpaceSight 产品升级 | 打造门店数智化未来

11月,「帷幄数智空间 Whale SpaceSight」迎来新的功能更新,一起来看一看,它将为您的门店数字化带来哪些强大助力。 我们将通过三篇系列文章,为您介绍 SpaceSight 在出入口客流分析、店内客流分析、门店巡检三大场景下,…

[附源码]计算机毕业设计JAVA郑工校园二手交易平台网站

[附源码]计算机毕业设计JAVA郑工校园二手交易平台网站 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM…

HTML学生中秋节日网页设计模板 DIV布局大学生中秋节网页作业制作 八月十五中秋静态网页成品代码下载 中秋节日网页设计作品

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

Laravel Valet - macOS 极简主义者的开发环境

1. Lar**el Valet 介绍2. Lar**el Valet 安装3. 测试 Lar**el Valet4. PHP 版本5. 服务站点6. 定制 Valet 驱动7. Valet 常用命令 1. Lar**el Valet 介绍 Lar**el Valet 是 macOS 极简主义者的开发环境。Lar**el Valet 将您的 mac 配置为在您的机器启动时始终在后台运行 Nginx&…

超实用的日志分析工具——Flightplot,你不会还没用过吧

在上一篇文章中已经为大家介绍过Flight Review分析日志工具的具体使用,但是该工具在使用过程中难免存在一些问题,例如:Flight Review工具需要在线浏览,很多时候受制于电脑网络延迟等问题,导致日志信息加载失败&#xf…

win11摄像头黑了用不了的七个解决办法

目录 前言必读 方法一、重置和隐式设置摄像头 方法二、更新windwos驱动 方法三、检查串行总线控制器 方法四、下载驱动精灵来安装驱动 方法五、驱动精灵里面修复 方法六、检查键盘上面有没有物理摄像头按键 方法七、使用万能摄像头 前言必读 读者手册(必读&…

职场经验:为什么要学习自动化测试?过来人告诉你答案

学习自动化这个想法,其实自己在心里已经琢磨了很久,就是一直没付诸实践,觉得现在手工测试已经能满足当前的工作需要,不想浪费时间去学习新的东西,有点时间还不如刷刷视频、看看小说等。 为什么要进行自动化测试&#x…

大量节省实施解决方案的时间和成本——AI vision生态系统

AI Vision是一款对用户友好的工具包 基于AI图像处理可以提高各个行业中的竞争力,已经测试并实现应用的用户无不惊讶于这一系统的速度以及出色成效。但不幸的是,AI Vision尚未得到全面评估,可以理解为黑盒,它不像制造商常常声称的…

如何搭建Docker环境

Docker 是一种虚拟化技术,基于 Linux 的容器机制(Linux Containers,简称 LXC),可以把它近似地理解成是一个“轻量级的虚拟机”,只消耗较少的资源就能实现对进程的隔离保护 使用 Docker 可以把应用程序和它…

MarchineCubes实现思路总结

MarchineCubes定义 是一种基于体素构建三维模型的方式,有些类似《我的世界》中的堆方块,但实际上,建模是以方块之间的交点为中心点,每个cube表示八个象限的相交模型 实现思路 在三维空间中划分网格,每个网格是一个c…

[附源码]JAVA毕业设计体育竞赛成绩管理系统(系统+LW)

[附源码]JAVA毕业设计体育竞赛成绩管理系统(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目…

Java基础之《netty(9)—netty和线程模型概述》

一、netty概述 1、NIO的类库和API繁杂,使用麻烦;需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。 2、需要具备其他的额外技能,要熟悉Java多线程编程,因为NIO编程涉及到Reactor模式,你必须…