1.今天在博客上突然看见一段代码,直接new一个Runnable接口,具体代码如下。
Runnbale runnable = new Runnable(){ public void run(){ //具体实现 } }
我第一次意识到接口也可以实例化。然后上网搜了一下答案,在此总结一下。
简单示例: 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了一个接口实例”。
观察bin目录下的class输出,会发现有一个类似Program。
class文件,如果反编译观察一下,发现原来是编译器自动生成一个类program。
如果有些场合,只需要临时需要创建一个接口的实现类,上面的"技巧"可以用来简化代码。