匿名内部类可直接实现接口,语法为“new 接口名() {重写方法};”,适用于多抽象方法接口、需访问外部成员或定义额外成员的场景,而单抽象方法接口优先用lambda。

可以直接用匿名内部类实现接口,无需定义实体类,一行代码就能创建临时实例。
语法结构要记牢
Java 中匿名内部类创建接口实例的写法是:
- 关键字 new + 接口名 + () + {}
- 大括号内重写接口中所有抽象方法
- 末尾必须加英文分号(因为是语句,不是声明)
典型场景:Swing 事件监听
比如给按钮添加点击响应,不用单独写一个 OnClickListener 类:
public void actionPerformed(ActionEvent e) {
System.out.println("按钮被点了");
}
});
函数式接口优先用 Lambda(但匿名内部类仍不可替代)
如果接口只有一个抽象方法(如 Runnable、Comparator),推荐用 Lambda 更简洁;但以下情况必须用匿名内部类:
- 接口含多个抽象方法(如
MouseListener) - 需要访问 this 或外部类成员变量(Lambda 有访问限制)
- 需在实例中定义额外字段或方法(Lambda 不支持)
小技巧:快速补全与类型推断
在 IDE(如 IntelliJ)中输入 new InterfaceName() { 后按回车,会自动补全所有未实现方法;如果赋值给明确类型的变量,编译器能准确推断,避免强转:
public void run() {
System.out.println("跑起来");
}
};











