Java匿名内部类
创始人
2024-03-24 07:32:37
0

Java匿名内部类\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(){//匿名内部类定义@Overridepublic 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() {@Overridepublic void swim() {System.out.println("学生快乐的自由泳🏊‍");}};go(s);System.out.println("--------------");//老师的匿名内部类Swimming s1 = new Swimming() {@Overridepublic void swim() {System.out.println("老师泳🏊的贼快~~~~~");}};go(s1);System.out.println("--------------");//运动员的匿名内部类go(new Swimming() {@Overridepublic void swim() {System.out.println("运动员🏊的贼快啊~~~~~");}});}/**学生 老师 运动员可以一起参加游泳比赛*/public static void go(Swimming s){System.out.println("开始。。。");s.swim();System.out.println("结束。。。");}
}//定义一个游泳接口,所有实现了该接口的人都要会游泳!
interface Swimming{void swim();
}

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

⑥. 总结

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

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...