什么是匿名内部类?不要被他的名字吓到了。将一个类A定义在另一个类B里面,里面的类A就称为内部类。
当你使用一个接口时,似乎得做如下几步操作。
- 定义子类
- 重写接口中的方法
- 创建子类对象
- 调用重写后的方法
我们的目的,最终只是为了调用方法,那么能不能简化一下,把以上四步合成一步呢?匿名内部类就是做这样的快捷方式.
1
2
3
4
5
6
7
8
//格式
new 父类名或者接口名(){
// 方法重写
@Override
public void method() {
// 执行语句
}
};
使用接口的匿名内部类
1
2
3
4
//创建接口
public abstract class hy{
public abstract void fly();
}
1
2
3
4
5
6
7
8
9
10
11
public class Hy {
public static void main(String[] args) {
hy fly = new hy(){
@Override
public void fly() {
System.out.println("fly...");
}
};
fly.fly();
}
}
通常在方法的形式参数是接口或者抽象类时,也可以将匿名内部类作为参数传递。
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Hy {
public static void main(String[] args) {
showfly(new hy(){
public void fly(){
System.out.println("fly...");
}
});
}
public static void showfly(hy f){
f.fly();
}
}
-
匿名内部类需要在抽象类或者接口的基础上实现。
-
匿名内部类的对象可以作为方法的参数传递也可以直接在方法体中创建。
-
方法中的匿名内部类可以直接访问方法的参数和局部量吗?
答:在jdk1.8之前需要使用final修饰方法的参数和局部变量,在之后可以直接访问