вот есть обсуждение
В чем суть интерфейсов в программировании?
Я бы сказал что интерфейс это контракт между слоями приложения. У вас есть слои дао, сервисов, может секьюрети и ещё что-то. Между ними есть интерфейсы. А значит вы без труда можете заменить реализацию какого то слоя другой реализацией. Например нечто подобное делает спринг когда создает дополнительную прослойку для управления транзакциями над дао. Так же это бывает удобно при тестировании когда для тестов вы пишете Mock объект