你能在初始化期间实现一个接口吗?

时间:2015-04-21 20:47:19

标签: java interface lambda runnable

我正在阅读Oracle的一个lambda表达式教程,并且遇到了以下代码:

http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html

public class RunnableTest {
  public static void main(String[] args) {

  System.out.println("=== RunnableTest ===");

  // Anonymous Runnable
  Runnable r1 = new Runnable(){

    @Override
    public void run(){
      System.out.println("Hello world one!");
    }
  };

  // Lambda Runnable
  Runnable r2 = () -> System.out.println("Hello world two!");

  // Run em!
  r1.run();
  r2.run();
  }
}

我的问题是为什么在创建课程时他们没有实现Runnable?由于它们在初始化r1时会覆盖run方法,这是否会影响实现?

1 个答案:

答案 0 :(得分:2)

是的,这在Java中称为匿名类。

https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

使用new运算符时,可以实现接口或扩展类,这将创建您当时定义的未命名子类的新实例。它主要用于编写要在另一个线程中使用的代码或作为回调,因为您只获得一个实例。

Java 8中的新lambda语法用单个方法替换接口的匿名类,例如Runnable或java.util.function中的接口。这就是他们在示例中展示的内容。