When I\'m shooting a glance at lambda expressions, the book touches on a functional interface that has only one abstract method. My issue addresses on that quiz que
An easy way to find out would be to try to define a class that implements SmartAdder
. The compiler will tell you you need to implement both add(int, int)
and add(double, double)
.
It's understandable that you thought add(double, double)
would override add(int, int)
, but they are in fact separate methods, and could potentially have totally unrelated implementations.
If SmartAdder
had defined a default
implementation of add(int, int)
it would be a functional interface still:
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
}
}
You may also have come across the @FunctionalInterface annotation - this can be placed on an interface to enforce at compile-time that the interface has exactly one abstract method. If SmartAdder
was annotated with @FunctionalInterface
the interface itself would not compile.