给定一个带默认方法的简单接口:
private interface A {
default void hello() {
System.out.println("A");
}
}
接受其实例的方法:
private static void print(A a) {
a.hello();
}
我可以使用匿名类覆盖它:
print(new A() {
@Override
public void hello() {
System.out.println("OverHello");
}
});
但如果我尝试使用lambda print(() -> System.out.println("OverHello2"));
,我会收到编译错误。
找不到目标方法
有没有办法用lambda进行覆盖?
答案 0 :(得分:8)
不,因为你的界面没有一个未实现的方法(lambda可以提供实现)。
答案 1 :(得分:0)
Lambdas不允许覆盖默认方法。这是一个有意的设计选择,因为它允许功能接口(可以通过lambda实例化的接口)具有一个或多个默认方法。
要成功允许通过lambda实例化A,您不能拥有t2
的默认定义。