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();
}
}
添加回答
舉報