Всі хороші відповіді тут. Я хотів би додати ще одне практичне використання статичної функції в інтерфейсі. Порада виходить з книги - Ефективна Java, 3-е видання Джошуа Блоха в розділі 2: Створення та знищення об’єкта.
Static functions can be used for static factory methods.
Статичний заводський метод - це методи, які повертають об'єкт. Вони працюють як конструктор. У конкретних випадках статичний заводський метод забезпечує більш читабельний код, ніж використання конструктора.
Цитування з книги - Ефективна Java, 3-е видання Джошуа Блоха
До Java 8 інтерфейси не могли мати статичні методи. Згідно з умовами, статичні заводські методи для інтерфейсу з назвою Type були розміщені в нерозбірливому супутниковому класі (Пункт 4) під назвою Types.
Автор наводить приклад колекцій, де реалізований такий статичний заводський метод. Перевіривши код, Джош Блох може розглядатися як перший автор класу Колекції. Хоча Колекції - це клас, а не інтерфейс. Але концепція все ще діє.
Наприклад, Java Collections Framework має сорок п'ять утилітних реалізацій своїх інтерфейсів, що забезпечують немодифікувані колекції, синхронізовані колекції тощо. Майже всі ці реалізації реалізуються за допомогою статичних заводських методів в одному неіснуючому класі (java.util.Collections). Класи повернених об'єктів - все непублічні.
Далі він пояснює, що API не тільки менший, він допомагає при читанні коду та простоті API.
Зменшується не лише основна частина API, а концептуальна вага: кількість та складність концепцій, які програмісти повинні засвоїти для використання API. Програміст знає, що повернутий об'єкт має саме API, визначений його інтерфейсом, тому немає необхідності читати додаткову документацію про клас для реалізації.
Ось один із статичних методів з класу java.util.Collections:
public static <T> Collection<T> unmodifiableCollection(Collection<? extends T> c) {
return new UnmodifiableCollection<>(c);
}