首先回答我们标题中的问题,接口能否被实例化呢?
答案是显而易见的,不能!
下面我们考虑如下的代码:
Runnable r1 = new Runnable(){
@Override
public void run(){
System.out.println("Hello world one!");
}
};
我们知道Runnable是一个接口而非一个类,它只含有一个抽象方法run(),它既没有构造方法也不能被实例化。那么它为什么可以被new关键字修饰呢?这对于作者这种初学者来说是一个难以理解的问题。
那么理解它的关键就在一个关键的知识点上–匿名内部类。匿名内部类的存在使得开发者可以在不需要另写一个接口的实现类的情况下,达到实现一个接口的目的。我们以如下代码块来解释以上的说法:
public interface Runnable {