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