Interfaces free the caller from having to know what class specifically implements the interface.
Imagine a program that gets its data from a database. Even though
JDBC makes calling SQL statements easy, the actual SQL can vary from DB to DB. If the data store is implemented as an interface, let's say with methods such as getMeThis() and getMeThat(), the actual implementation of the class that implements that interface is moot.
Therefore, any number of classes that implement the interface, whether it be for MySQL, or PostgreSQL, or DBASE or any other database can be written
and the caller of the interface method doesn't know or care which class is being used.
The interface defines a contract that all database access classes must follow, but the caller of that contract doesn't need to know what was used.