匿名类是不能有名字的类,它们不能被引用,只能在创建时用 new 语句来声明它们。
Java 中可以实现一个类中包含另外一个类,且不需要提供任何的类名直接实例化。
主要是用于在我们需要的时候创建一个对象来执行特定的任务,可以使代码更加简洁。
一、匿名类的使用:
1、匿名类继承一个父类
// 父类
class Polygon {
public void display() {
System.out.println("在 Polygon 类内部");
}
}
// 子类,继承父类并重写父类的display方法
class AnonymousDemo {
public void createClass() {
// 创建的匿名类继承了 Polygon 类
// 一个类中包含另外一个类
Polygon p1 = new Polygon() {
public void display() {
System.out.println("在匿名类内部。");
}
};
p1.display();
}
}
class Main {
public static void main(String[] args) {
AnonymousDemo an = new AnonymousDemo();
an.createClass();
}
}
2、匿名类实现一个接口
interface Polygon {
public void display();
}
class AnonymousDemo {
public void createClass() {
// 匿名类实现一个接口
Polygon p1 = new Polygon() {
public void display() {
System.out.println("在匿名类内部。");
}
};
p1.display();
}
}
class Main {
public static void main(String[] args) {
AnonymousDemo an = new AnonymousDemo();
an.createClass();
}
}
二、回调(CallBack)中的匿名类应用
// 接口
public interface ICallback {
void methodToCallback();
}
public class BClass {
public void process(ICallback callback) {
//...
callback.methodToCallback();
//...
}
}
public class AClass {
public static void main(String[] args) {
BClass b = new BClass();
// A 类在调用B的时候,B又去调用A注入的你匿名类,创建一个完成特定任务的对象。
b.process(new ICallback() { //回调对象
@Override
public void methodToCallback() {
System.out.println("Call back me.");
}
});
}
}