Functional interface in Java 8 can have only one abstract method that is why it is called SAM (single abstract method) but it can have any number of default and static methods and methods of object class also. For example Runnable and Comparable are the examples of functional interfaces which have only one abstract method.

@Functional Interface annotation is used to mark it as functional interface but it is not mandatory to use it as per my understanding it is good practice to use it so that it can not have more than one abstract method to avoid addition of extra methods accidentally. It will throw compile time error if we try to add more than one abstract method in a functional interface.

Here is the example of Functional interface in Java.

package com.javatutsworld;

@FunctionalInterface
interface CalInterface {
    void add(int a, int b);
}

public class Java8FunctionalInterfaceExample implements CalInterface {
    public void add(int a, int b) {
        System.out.println("This is total of two numbers: " +(a + b));
    }

    public static void main(String args[]) {
        Java8FunctionalInterfaceExample j8fie = new Java8FunctionalInterfaceExample();
        j8fie.add(20, 20);
    }
}

Output

This is total of two numbers: 40

Here is the example of Functional interface with methods of object class and default method

package com.javatutsworld;

@FunctionalInterface
interface CalInterface {
    void add(int a, int b);
    //Object class methods.  
    int hashCode();  
    String toString();  
    boolean equals(Object obj); 
    //default method
    default void sub(int a, int b){
        System.out.println("This is subtraction of two numbers: " +(a - b));
    }
}

public class Java8FunctionalInterfaceExample implements CalInterface {
    public void add(int a, int b) {
        System.out.println("This is total of two numbers: " +(a + b));
    }

    public static void main(String args[]) {
        Java8FunctionalInterfaceExample j8fie = new Java8FunctionalInterfaceExample();
        j8fie.add(20, 20);
        j8fie.sub(50, 20);
    }
}

Output

This is total of two numbers: 40
This is subtraction of two numbers: 30