java接口实例化对象

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。

如果有些场合,只需要临时需要创建一个接口的实现类,上面的"技巧"可以用来简化代码。

 

  

     

posted @ 2018-04-09 19:43  把握当下  阅读(1458)  评论(0编辑  收藏  举报