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类型对应的子类,并且匿名内部类定义之后就会产生一个相应类型的对象,匿名内部类的使用目的就是简化代码。

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...