По моему мнению, интерфейс имеет более широкое значение, чем тот, который обычно ассоциируется с ним в Java. Я бы определил «интерфейс» как набор доступных операций с некоторыми общими функциями, которые позволяют контролировать / контролировать модуль.
В этом определении я пытаюсь охватить как программные интерфейсы, где клиент - это какой-то модуль, так и человеческие интерфейсы (например, GUI).
Как уже говорили другие, у интерфейса всегда есть какой-то контракт с точки зрения входов и выходов. Интерфейс ничего не обещает о «как» операций; он гарантирует только некоторые свойства результата, учитывая текущее состояние, выбранную операцию и ее параметры.