匿名内部类的特性与用法
匿名内部类是Java中一种特殊的类,可以在声明和实例化的同时使用,,不需要单独命名。它的使用场景主要是在创建只需要使用一次的类的实例时。下面将介绍匿名内部类的一些特性和常见的用法。
特性:
- 没有类名: 匿名内部类没有类名,可以在声明和实例化时直接使用。
- 继承父类或实现接口:匿名内部类可以继承父类或实现接口,可以重写父类的方法,实现自己的逻辑。
- 局部有效:匿名内部类的作用域限定在声明它的方法或代码块内部,超出这个范围就无法使用。
- 可以捕获外部类的变量:匿名内部类可以访问和使用外部类的成员变量和方法,但要求外部类的变量是final或是等同于final效果的。
用法:
1. 在线程中使用匿名内部类:
Thread thread = new Thread(new Runnable() {
public void run() {
// 线程执行的代码逻辑
}
});
thread.start();
2. 在事件监听中使用匿名内部类:
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 按钮点击事件的处理逻辑
}
});
3. 在集合中使用匿名内部类:
List<String> names = new ArrayList<>() {
{
add("Alice");
add("Bob");
}
};
这里创建了一个ArrayList的匿名子类,并在实例化时添加了”Alice”和”Bob”两个元素。
通过上面的介绍,我们可以看到匿名内部类在某些场景下非常方便,可以简化代码的编写。但是它也有一些限制,比如只能继承一个类或实现一个接口,无法继承和实现多个,且匿名内部类无法被其他类继承或重用。