什么是匿名实现类?
定义:
在java中,匿名实现类对象是一种特殊的对象,它是通过匿名类来创建的。匿名类是一个没有名字的类,它是在代码中直接定义和实例化的。匿名实现类对象通常用于实现接口或者扩展类,因为它可以快速地创建一个实现特定接口的对象,而不需要显式地定义一个新的类。
举例:
假如有一个接口MyInterface,该接口定义了一个方法doSomething(),要创建一个实现该接口的匿名实现类对象,可以使用以下代码:
MyInterface obj = new MyInterface(){
public void doSomething(){
//实现doSomething的方法
}
}
在这个例子中,我们创建了一个匿名实现类对象obj,它实现了MyInterface接口,并实现了doSomething()方法。这个匿名实现类对象可以像其他对象一样使用,可以调用它的doSomething()方法。
注意:
由于匿名类没有类名,因此无法在其他地方重复使用。
我们在学习多线程的过程中一定会遇到以下的写法
new Thread(new Runnable() {
@Override
public void run() {
for(int i = 0;i<=40;i++){
ticket.sell();
}
}
},"C").start();
Runnable是一个接口,Thread需要一个实现Runnable接口的对象,而我们这种写法中发现我们直接new了接口,给我们一种接口可以new的错觉
其实不是的,其实这是一种匿名内部类的写法,new之后的括号中其实可以看做你写了一个类,实现了这个接口,重写了方法,只不过这个类是匿名的,没有名字,所以称为匿名内部类。
并且对象的创建最终都是需要调用构造方法,接口中是没有构造方法的,类中显示声明构造方法,但默认有空参构造方法,接口中是没有的
1、匿名内部类
本质上是一个没有名字的局部内部类,定义在方法中、代码块中、等。
作用:方便创建子类对象,最终目的是为了简化代码编写。
2、格式
new 类|抽象类名|或者接口名(){
重写方法;
}
范例:
Employee a = new Employee(){
public void work(){
}
}
3、特点总结
匿名内部类是一个没有名字的内部类。
匿名内部类写出来就会产生一个匿名内部类的对象。
匿名内部类的对象类型相当于是当前new的那个的类型的子类型。
4、匿名内部类在开发中的使用形式了解
示例1
/**
目标:掌握匿名内部类的使用形式
*/
public class Test {
public static void main(String[] args) {
//使用匿名内部类替代学生类,创建的类型是new的那个类的子类
Swimming s = new Swimming() {
@Override
public void Swim() {
System.out.println("学生游的很快");
}
};
go(s);
}
/**
方法:学生、老师、运动员可以一起游泳
*/
public static void go(Swimming s)
{
System.out.println("开始游泳了~~");
s.Swim();
System.out.println("结束游泳了~~");
}
}
//创建学生类
/*class Student implements Swimming{
@Override
public void Swim() {
System.out.println("学生游的很快");
}
}*/
//定义一个接口规范游泳
interface Swimming{
void Swim();
}
使用总结:匿名内部类可以作为方法的实际参数进行传输。