java接口实例化对象

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。接口

若是有些场合,只须要临时须要建立一个接口的实现类,上面的"技巧"能够用来简化代码。编译器

相关文章
相关标签/搜索