精通 Java 匿名内部类:定义、语法与实战示例
精通 Java 匿名内部类
通过清晰的真实案例,学习如何定义、实现和利用 Java 匿名内部类。
Java 中类可嵌套另一类 —— 内部类。当该内部类无显式名称时,称为匿名内部类。
匿名内部类在另一类或表达式内联定义。因无名称,仅在包围代码运行时创建,适合简短、一次性的实现。
典型模式:
class OuterClass { // 创建匿名内部类实例 Type instance = new Type(parameters) { // 重写方法或额外行为 }; }
此处 Type 可以是:
- 匿名类扩展的超类
- 匿名类实现的接口
运行时,上述语句构建匿名类实例,可通过声明的引用类型使用。
重要: 因声明是表达式,结束分号终止语句,而非类体。
示例 1:用匿名内部类扩展类
class Polygon { public void display() { System.out.println("Inside the Polygon class"); } } class AnonymousDemo { public void createClass() { Polygon p1 = new Polygon() { @Override public void display() { System.out.println("Inside an anonymous class."); } }; p1.display(); } } public class Main { public static void main(String[] args) { new AnonymousDemo().createClass(); } }
输出
Inside an anonymous class.
此例中匿名类扩展 Polygon 并重写 display()。createClass() 运行时创建匿名子类实例,调用其重写方法。
示例 2:用匿名内部类实现接口
interface Polygon { void display(); } class AnonymousDemo { public void createClass() { Polygon p1 = new Polygon() { @Override public void display() { System.out.println("Inside an anonymous class."); } }; p1.display(); } } public class Main { public static void main(String[] args) { new AnonymousDemo().createClass(); } }
输出
Inside an anonymous class.
此处匿名类实现 Polygon 接口,在单一简洁块中提供所需方法实现。
为何使用匿名内部类?
匿名内部类在需简短、上下文特定实现的场景大放异彩:
- 事件监听器与回调 —— GUI 框架中轻松附加行为,无需创建单独命名类。
- 线程创建 —— 通过
Runnable内联编写运行逻辑。 - 本地适配器或包装器 —— 重写现有类的少数方法。
优势包括:
- 简洁 —— 无需单独文件或类声明。
- 作用域控制 —— 类仅在定义处可见。
- 运行时灵活性 —— 实例仅在需要时创建。
对于更大、可复用的逻辑,考虑命名类或 Lambda 表达式(针对函数式接口)以保持代码可维护。
java
- 深入理解 Java final 关键字:变量、方法与类的不可变性
- Java instanceof 运算符完全指南:用法、继承与接口检查
- 精通 Java 继承:核心概念、类型与实战示例
- 深入理解 Java 静态嵌套类:用法、差异与实战示例
- Java 单例模式详解:安全实现与使用指南
- 精通 Java 反射:运行时检查类、方法与字段
- 精通 Java ArrayList:操作、方法与最佳实践
- Java Stack 类全面指南:用法、核心方法与实战示例
- Java HashSet 类完全指南:操作、方法与集合论实战
- 掌握 Java ObjectOutputStream:序列化、核心方法与实战示例
- 掌握 Java 泛型:构建可复用、类型安全的代码
- 掌握 Java 文件操作:java.io 包下的创建、读取、写入与删除