我对接口的了解是:
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)创建Interface对象是否合法?据我所知,接口类型只能引用实现该接口的类对象。
3)如果它合法,那么目的是什么?
由于
答案 0 :(得分:1)
1)不,他们没有。
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);
}
但是为它创建一个新类太简单了,所以可以传递一个匿名实例:
Arrays.asList(1, 2, 3)
.forEach(new Consumer<Integer>() {
@Override
public void accept(Integer integer) {
System.out.println(integer);
}
});
稍微好些但仍然相当冗长。这就是lambda表达式派上用场的地方:
Arrays.asList(1, 2, 3)
.forEach(integer -> System.out.println(integer));