Интерфейс - альтернатива наследованию.
Смысл в том, что в качестве параметра функции типа "интерфейс" или значения переменной типа "интерфейс" можно использовать объект любого класса, реализующего этот интерфейс.
Интерфейс нужен для полиморфизма. И обеспечивает такую же гибкость, как и отсутствующее в Java множественное наследование - без того геморроя, который вызывает наследование.