There is a definition of a functional interface in the
Java® Language Specification (=JLS); it says specifically that methods inherited from Object do not count towards the definition of a functional interface.
Default methods are also excluded which means the Java8 version of
Comparator has 18 methods and is still marked @
FunctionalInterface←
Easier explanation to understand than in the JLS. It has one method from Object and 16 default methods, leaving only one fully abstract method.