我对接口的了解是:
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)如果它是合法的,那么它的目的是什么?
谢谢
发布于 2017-08-26 13:14:42
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));https://stackoverflow.com/questions/45895729
复制相似问题