匿名类是在创建对象时定义并实例化的无名内部类,常用于实现接口或继承类,如通过new Runnable() { @Override public void run() { ... } }实现任务逻辑,适用于事件处理、线程任务等场景,可简化代码结构。

在Java中,匿名类是一种没有名字的内部类,通常用于快速实现接口或继承类。当你只需要使用一次某个接口的实现时,使用匿名类可以避免创建额外的类文件,让代码更简洁。
什么是匿名类
匿名类是在创建对象的同时定义一个类,并立即实例化它。它常用于实现只有一个方法的接口(比如函数式接口),或者需要临时重写某个方法的场景。
如何用匿名类实现接口
假设有一个简单的接口 Runnable,它只有一个方法 run():
interface Runnable {void run();
}
你可以通过匿名类的方式快速实现这个接口:
立即学习“Java免费学习笔记(深入)”;
// 创建一个实现了Runnable接口的匿名类实例Runnable task = new Runnable() {
@Override
public void run() {
// 实现具体逻辑
System.out.println("任务正在执行...");
}
};
然后你可以像调用普通对象一样使用它:
// 调用run方法task.run();
常见应用场景
匿名类在事件处理、线程任务、回调函数等场景中非常常见。
- 启动一个新线程时直接传入任务逻辑
- 为按钮设置点击监听器(如Swing中)
- 临时实现某个策略接口
例如,在多线程中启动一个一次性任务:
// 使用匿名类创建线程任务new Thread(new Runnable() {
@Override
public void run() {
System.out.println("线程运行中...");
}
}).start();
注意:从Java 8开始,如果接口是函数式接口(只有一个抽象方法),可以用Lambda表达式替代匿名类,使代码更简洁。例如上面的例子可简写为:
new Thread(() -> System.out.println("线程运行中...")).start();但在不支持Lambda的老版本Java中,或需要重写多个方法的接口时,匿名类仍是实用的选择。
基本上就这些,匿名类帮你省去定义单独类的麻烦,适合轻量、一次性的接口实现。










