1.今天在博客上忽然看见一段代码,直接new一个Runnable接口,具体代码以下。java
Runnbale runnable = new Runnable(){ public void run(){ //具体实现 } }
我第一次意识到接口也能够实例化。而后上网搜了一下答案,在此总结一下。spa
简单示例: public interface ISay { void sayHello(); } /*****************/ public class Program { public static void main(String[] args) { ISay say = new ISay() { public void sayHello() { System.out.println("Hello java!"); } }; } } /*****反编译代码********/ class Program$1 implements ISay { public void sayHello() { System.out.println("Hello java!"); } }
初看上去,就好象在“不提供接口实现的状况下,直接new了一个接口实例”。code
观察bin目录下的class输出,会发现有一个相似Program。blog
class文件,若是反编译观察一下,发现原来是编译器自动生成一个类program。接口
若是有些场合,只须要临时须要建立一个接口的实现类,上面的"技巧"能够用来简化代码。编译器