最近在看代码的时候看到类似如下的直接new一个接口的方式:
Runnable ru=new Runnable(){
public void run() {
//something to do
}
}
起初迷惑,似乎违反了Java接口的特征定义;后来发现,Javac 编译后,会生成一个匿名类,该匿名类再实现Runnable接口,也就是,上面代码
new的是一个实现了该接口的匿名类,而并非接口,只是语法上容易造成误解。
该方式可用在临时使用接口实现的场景上,免去再重新写一个接口的实现类,简化代码。