在分析Android5.0的代码时,发现一段代码比较有意思,特摘录如下:
在呼叫挂断的时候,会调用到getNullConnection,这里会new一个Connection实例,
static synchronized Connection getNullConnection() {
if (sNullConnection == null) {
sNullConnection = new Connection() {};
}
return sNullConnection;
}
实际上,Connection是一个抽象类,根据我们的常识,抽象类是不能被实例化的。
public abstract class Connection {
…
}
所以我们需要注意到Connection后面的大括号{},它表示用匿名类的方式重写了抽象类,只不过类里面没有重写任何方法,这样就“实现”了一个抽象类的实例化,在我们需要的时候,可以指向真正要操作的实例。