Один из лучших примеров - пакет java.sql.
Причина:
когда разработчик имеет четкое представление о том, что необходимо сделать и как структурировано все приложение [еще не разработано], он предоставляет эту идею через API в виде набора интерфейсов.
Например:
когда SUN (теперь oracle :-() публикует API для JDBC, весь пакет SQL (ну и большая часть его) - это просто интерфейсы с очень хорошо определенной совместимостью, но фактический поставщик DB / RDBMS знает, что делать, чтобы достичь результатов, как ожидается в API.
Следовательно, вы можете записывать ваши java и взаимодействие с БД отдельно, в то время как поставщик БД записывает базу данных отдельно.
Поставщик просто должен написать драйвер, который соответствует стандарту API (интерфейсы), не сообщая вам, как он это сделал.
Тем не менее, ваше приложение и БД взаимодействуют без каких-либо проблем [в большинстве случаев; -)]
это длинный ответ, но надеюсь, что это поможет.
Спасибо,
Ayusman