The way I see it, interfaces are used in a similar way to electrical connectors: they define the signals that go in and out of a device so that you don't have to care what exactly is plugged in as long as it respects those rules.
For example, take an mp3 player and it's headphone jack. The engineers that build your mp3 player don't have to care what kind of headphones you will be using on it, and that is possible because of the jack interface.
They program your player against that interface, and then any type of headphones will work as long as they have the jack with the right size. They can even be speakers, they still work (isn't that cool?).
Furthermore, nobody forbids you to plug in something else in the jack socket, as long as it has a jack plug (it implements the interface). You are free to interpret the signals in whatever way you want, and you can for example build a device that changes color instead of playing music.
OOP interfaces work in a similar way: if you require an interface for the objects that are passed as parameter for a method, the caller can send you any implementation for that interface, and the objects that are sent can interpret the calls in their own way.