One of the best example is java.sql package.
The reason is:
when the designer has a clear idea in mind as to what needs to be done and how the entire application [yet to be designed] structured they provide this idea through an API as a bunch of interfaces.
For example:
when SUN (now oracle :-( ) publishes the API for JDBC, the entire SQL package (well most of it) is just interfaces with interoperability very well defined; but the actual vendor of the DB/RDBMS knows what to do so that they achieve the results as expected in the API.
Hence you can write ur java and DB interaction separately while the Database vendor writes the database separately.
The vendor just has to write a driver that meets the API (interfaces) standard with out telling you how he did it.
Yet ur application and the DB interoperate with out any problem [well most of the time ;-)]
it's a long answer but hope this helps.
Thanks,
Ayusman