1 回答
TA贡献1798条经验 获得超3个赞
您可以定义一个 lambda 表达式来表示一个A实例,无论您所处的上下文如何。它可以是静态接口方法,也可以是默认接口方法。
@FunctionalInterface
interface A {
void printMessage();
}
interface B {
default void printMessage() {
A a = () -> System.out.println("A implementation (1)");
a.printMessage();
}
}
interface C {
static void printMessage() {
A a = () -> System.out.println("A implementation (2)");
a.printMessage();
}
}
正如您可能已经注意到的,它并不是特别有用,因为这两种方法都可以简单地重写为
System.out.println("...");
如果接口之间存在关系,则默认方法将为超级接口中定义的方法提供实现。静态方法会导致编译错误,因为它们无法覆盖实例方法。
@FunctionalInterface
interface A {
void printMessage();
}
interface B extends A {
@Override
default void printMessage() {
A a = () -> System.out.println("A implementation (1)");
a.printMessage();
}
}
interface C extends A {
// compilation error
static void printMessage() {
A a = () -> System.out.println("A implementation (2)");
a.printMessage();
}
}
添加回答
举报