1、接口可以实例化吗?
Runnable a1 =new Runnable () {}这样是不对的,因为接口不能被“直接实例化”。
Runnable a1 =new Runnable () {
public void run() {
}
};
是对的,这实际上是一种构造内部类的”简写“,在这里:
- 首先构造了一个”implements Runnable “的无名local内部类(方法内的内部类)
- 然后构造了这个无名local内部类的一个实例
- 然后用Runnable来表示这个无名local内部类的type(OO多态)。
比如,你编译如下代码:
class CTest{
void m(){
Runnable a1 =new Runnable () {
public void run() {
}
};
}
}
你会得到2个类:
CTest.class
CTest$1.class
其中CTest$1.class就是这个无名local内部类