一种简单的查找方法是尝试定义一个实现的类
SmartAdder。编译器会告诉您需要同时实现
add(int, int)和
add(double,double)。
您以为
add(double, double)可以覆盖
add(int,int),这是可以理解的,但是它们实际上是单独的方法,并且可能具有完全不相关的实现。
如果
SmartAdder已经定义了它的
default实现,
add(int, int)它将 仍然是 一个功能接口:
public interface SmartAdder extends Adder { int add(double a, double b); default int add(int a, int b) { return add((double)a, (double)b); // this calls the double method instead }}您可能还遇到过
@FunctionalInterface注释-
可以将其放置在接口上以在编译时强制该接口仅具有一个抽象方法。如果
SmartAdder使用
@FunctionalInterface接口本身进行了注释,则无法编译。



