Java 仅创建接口实例的目的是什么?

Java 仅创建接口实例的目的是什么?,java,interface,Java,Interface,我对接口的了解是: 1) 接口是方法列表,即模板 2) 接口类型可以引用实现该接口的类的对象 今天我遇到了以下代码 interface Test { void greet(); } public class Demo { public static void main(String[] args) { Test t = new Test() ---> Is it correct ? WHY ? { publi

我对接口的了解是:

1) 接口是方法列表,即模板

2) 接口类型可以引用实现该接口的类的对象

今天我遇到了以下代码

interface Test  
{  
  void greet();  
}  
public class Demo  
{  
  public static void main(String[] args)  
  {  
    Test t = new Test()  ---> Is it correct ? WHY ?
     {  
       public void greet()  
       {  
         System.out.print("\nHi, Best wishes to way2java.com\n");  
       }  
    };  
    t.greet();  
    }  
}  
我无法理解下面代码片段的意图

Test t = new Test() 
1) 接口是否有构造函数?据我所知,接口只有方法列表,没有定义

2) 创建接口对象合法吗?据我所知,接口类型只能引用实现该接口的类的对象

3) 如果是合法的,那么目的是什么

谢谢不,他们没有

2) 没有

这里创建的是一个实现接口的匿名类——请注意,您被迫实现了
greet
方法

在代码中存在这样的情况:您根本不关心为实现指定一个特定的名称——然后您可以传递匿名内部类——Java中lambda表达式的整个概念就是基于此的

假设您想使用
forEach
方法打印列表内容:

Arrays.asList(1, 2, 3)
  .forEach(...);
forEach
接受作为接口的
Consumer
实例。因此,您可以创建自己的类:

class IntegerPrinter implements Consumer<Integer> {

@Override
public void accept(Integer integer) {
    System.out.println(integer);
}

我相信这是内联实现的格式。因为它们都在调用它的一个新实例,然后实现其中定义的方法列表。这里的匿名类是指JVM创建的任何随机类(在本例中是它的测试),如果我们创建这样的实例。在后端,总是存在一些实现测试接口的随机类。我们这样做是为了减少创建实现(测试)接口的新类的工作量。我的理解正确吗?@LearnJava是的,但最终,你还是实现了它,但你没有给这个类命名。
Arrays.asList(1, 2, 3)
  .forEach(new Consumer<Integer>() {
      @Override
      public void accept(Integer integer) {
          System.out.println(integer);
      }
  });
 Arrays.asList(1, 2, 3)
   .forEach(integer -> System.out.println(integer));