(In the context of .NET for what its worth)
I tend to not use inheritance and rarely use interfaces. I came across someone who thinks interfaces are the best thing
Interfaces have many useful situations. When you need to add a specific behavior to a class that can be found across a wide variety of classes, that's a perfect time for an interface. A good example is the IDisposable
interface - you have some resource that when you're done, needs to go away in a timely fashion. Is it a database connection? Is it some window handle? Doesn't matter.
Another example would be when you really don't know how it should be implemented, such as an interface to an object that doesn't exist yet. Perhaps the object should be supplied by a client of your library, or must be implemented by a completely different module not under your control. You can basically design a contract for the methods available on the class.
That said, I only use them where it's needed. If I can do it with a regular class, or if it's something intrinsic to the particular object, I'll make it a class. There are some advantages to using Interfaces for every class as others have said, but that's so much extra overhead that I don't see a decent net gain on it. Most of the time, I've designed my class structures so that they're flat and wide, with as few dependencies as possible.
In summary: If you have common functionality required that's implemented dramatically differently, an Interface is just what you need.
One of the most important reasons for using an interface is the fact that they allow us to write unit tests for our classes and pass in our own dependencies. By putting the dependency behind an interface we open up "Seams" in our application code, where unit tests can easily be written. I don't see this test angle mentioned in many of the answers, but it is very important to understand that without interfaces, these dependencies (such as a web service, or a file system reference) can become very hard to test or at best are quite conditional. I have written a post here: http://jeffronay.com/why-use-an-interface/ that goes into much more detail with code examples showing a Service class without an interface, and then the same class re-written using an interface to demonstrate the testing flexibility when using interfaces.
If you want to understand when to use interfaces, and what is their use, I think you should take a look at the book: Head First Desing Patterns.
This is the book that really helped me understand what is so cool about interfaces.
Before reading this book, I knew what an interface was, but I had absolutely no idea about when should I use them.