What are 'default methods' exactly?
Default methods provide a mechanism for you to add implementation to an interface without making it an abstract class.
The main use case for default methods has been the task of adding methods to an interface without breaking other people's code. However, they also let you "mix in" functionality through implementing an interface, which is a very powerful addition to Java's type system that used to allow only a single line of implementations.
What is a 'functional interface'?
Functional interface, on the other hand, is a way to tell the compiler that your interface is going to have exactly one method. In exchange for that the compiler gives you a much shorter syntax for defining implementations of your interface, dramatically shortening the code that used to depend on anonymous classes.
In addition to the two features above, interfaces let you define static functions to be shared among all implementations. Like default implementations, this adds a "second dimension" to inheriting implementation, because it lets you share code through interface implementation.