Для реализации модульности и
слабой связанности. Интерфейс - это, по сути, контракт (на "поставляемое" множество и сигнатуры методов).
Принципиальное отличие его от абстрактного класса в том, что в Яве нет множественного наследования и, соответственно, конкретный класс может
наследовать только
от одного абстрактного. А вот
имплементировать разных интерфейсов он может,
сколько душе угодно.
Если же учесть при этом, что есть еще и абстрактные методы, становится понятно, что абстрактный класс/методы и интерфейс - инструменты для разных задач.
Классический пример правильного использования интерфейсов - явовские коллекции. Прикиньте, учитывая соображения выше, какой бы это был геморой в использовании, если бы API было сделано не через интерфейсы, а через абстрактные классы :)