They are mostly used for code reusability. If you code to the interface you can use a diffrent class that inherits from that interface and not break everything.
Also they are very usefull in webservices where you want to let the client know what a class does (so they can consume it) but dont want to give them the actual code.