概念
- Java中的匿名内部类,是一种没有名称的内部类。可以使用匿名内部类来简化代码,并且不必定义一个专门的类来实现接口或继承一个类。
语法形式
new 父类构造器|实现接口() {
// 匿名内部类的类体
};
使用场景
-
当需要一个接口实现或抽象类的子类实例,但不希望编写一个新的类去实现该接口或继承该抽象类时。
-
当需要在方法内部,为某个对象的属性或参数创建特定的处理逻辑时。
代码说明
- 假设有一个接口,接口中有一个方法
interface Animal {
void sayHi();
}
- 为了使用sayHi方法,我们需要去创建一个实现类,同时编写sayHi的具体实现方式。
public class AnimalImpl implements Animal {
@Override
public void sayHi() {
System.out.println("I'm a dog...");
}
}
- 如果实现类AnimalImpl 全程只使用一次,那么为了这一次的使用去创建一个类,未免太过麻烦。这时匿名内部类就可以很好的解决这个问题。
public class App {
public static void main(String[] args) {
// 使用匿名内部类实现Animal接口
Animal dog = new Animal() {
@Override
public void sayHi() {
System.out.println("wang wang");
}
};
dog.sayHi();
// 使用Lambda表达式实现Animal接口
Animal cat = () -> System.out.println("meow");
cat.sayHi();
}
}
总结
- 需要注意的是,匿名内部类只能使用一次。如果需要多次使用,则需要重新创建一个新的匿名内部类。
- 匿名内部类虽然便于我们在程序中直接使用抽象类和接口,但是如果匿名内部类的代码过于冗长,可能会降低代码的可读性,建议在代码数量比较多的情况下,还是尽量定义正式的具名类来实现接口或继承类。