匿名内部类是一种没有名字的内部类,通常用于创建临时的、只使用一次的类对象。在Java中,匿名内部类有以下几种使用形式:
- 作为接口的实现类
interface MyInterface {
void doSomething();
}
MyInterface myInterface = new MyInterface() {
@Override
public void doSomething() {
// 实现接口方法
}
};
在这个示例中,通过匿名内部类创建了一个实现了MyInterface接口的类对象,该类对象只使用一次。
- 作为父类的子类
class MyClass {
void doSomething() {
// 实现方法
}
}
MyClass myClass = new MyClass() {
@Override
void doSomething() {
// 覆盖父类方法的实现
}
};
在这个示例中,通过匿名内部类创建了一个MyClass类的子类对象,该子类对象只使用一次。
- 作为方法的参数
void doSomething(MyInterface myInterface) {
myInterface.doSomething();
}
doSomething(new MyInterface() {
@Override
public void doSomething() {
// 实现接口方法
}
});
在这个示例中,通过匿名内部类创建了一个实现了MyInterface接口的类对象,并将该对象作为参数传递给了doSomething()方法。
需要注意的是,匿名内部类不能有构造方法,因为它没有名字。如果需要传递参数,可以使用实例初始化块来进行初始化。
4.作为局部变量
void doSomething() {
int num = 5;
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println(num);
}
};
new Thread(runnable).start();
}
在这个示例中,通过匿名内部类创建了一个Runnable接口的实现类对象,并将该对象作为参数传递给了Thread类的构造方法。
5. 作为数组元素
MyInterface[] myInterfaces = new MyInterface[] {
new MyInterface() {
@Override
public void doSomething() {
// 实现接口方法
}
},
new MyInterface() {
@Override
public void doSomething() {
// 实现接口方法
}
}
};
在这个示例中,通过匿名内部类创建了两个实现了MyInterface接口的类对象,并将它们作为数组的元素。