There's a certain style of API design that's very popular in the Java world, where everything is expressed in terms of Java interfaces (as opposed to classes). Interfaces have their place, but it is basically never a good idea for an entire API to be expressed in terms of them. A type should only be an interface if you have a good reason for it to be.
McManus goes on to explain the problems with interfaces and to list the cases where interfaces make sense. This is the best explanation of the tradeoffs I have seen anywhere.
Of course, the article isn't just about interfaces. It includes lots of other guidelines for Java API design. Good stuff.