匿名内部类
下面我们先通过一段代码初步了解一下匿名内部类。
public class Test {
public static void main(String[] args) {
driveCar(new Car(){
@Override
public void drive() {
System.out.println("驾驶着汽车");
}
});
}
public static void driveCar(Car car){
car.drive();
}
}
interface Car {
void drive();
}
分析以上代码知道静态方法driveCar需要一个Car对象,我们通过实现接口创建一个匿名类对象传递过去。匿名内部类和局部内部类只能访问外部类的final变量。
我们知道,final修饰变量时,在对其初始化之后便不能再让其指向另一个对象。
因此当需要使用匿名内部类并且希望外部变量做处理的时候,可以将其存至final修饰的map对象中:
public class Test {
static final Map m = new HashMap();
public static void main(String[] args) {
driveCar(new Car(){
@Override
public void drive() {
m.put("info","驾驶着汽车");
}
});
}
public static void driveCar(Car car){
car.drive();
System.out.println(m);
}
interface Car {
void drive();
}
}
输出: