Any Interface annotated with @FunctionalInterface, instructs compiler to check that, this Interface should have only one abstract method declared in it.

Characteristics of Functional Interface.
- You can have only one abstract method in Functional Interface.
- You can have default methods and static methods in Functional Interface because they are not abstract.
- You can have public methods of java.lang.Object class in Functional Interface because these method won't count towards Functional Interface's abstract method.

Myth about @FunctionInterface and Lambda Expression
Many developers think if we want to use any Interface in Lambda Expression then it must be Functional Interface. Its completely wrong!

You can use any Interface in Lambda expression that has only one abstract method in it, even if you not annotated Interface with @FunctionalInterface.

But if you are planning to use your Interface as Lambda Expression then annotated your Interface with @FunctionalInterface because compiler will check that this Interface should have only one abstract method at compile time. And also when other developer see that this is functional interface so they won't add new abstract method in it.