Java 仅创建接口实例的目的是什么?
我对接口的了解是: 1) 接口是方法列表,即模板 2) 接口类型可以引用实现该接口的类的对象 今天我遇到了以下代码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
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));