我们有这个代码:
public class Test {
public static Object foo() {
System.out.println("Foo");
return new Object();
}
public static void main(String[] args) {
J j = Test::foo;
j.m();
}
}
interface J {
void m();
}
Run Code Online (Sandbox Code Playgroud)
这段代码会起作用。关键线是
J j = Test::foo;
Run Code Online (Sandbox Code Playgroud)
虽然interface J声明它有一个void函数,但Test::foo返回一个Object.
虽然我们不能在实现接口时覆盖方法(这是显而易见的)。这仅在接口的方法为 时有效void,否则不会编译代码。有人能说出为什么这会以这种方式工作吗?:D