In Java, one of the reasons is that you don't have multiple inheritance, so the moment you extend an Abstract Class, that's it, there's no way you can extend any other.
The only way to work around this, is through a complex tree of dependencies that are very bad for your architecture in the long run (it'll get really hard to figure out quickly what depends from what).
If your class C needs to expose the interface of abstract class AC (interface in the broad sense of the term), then you can make class C extend AC. But now you also want your class C to expose the interface of another class AC1... and there's no simple way to do so. You'll need to resort either to composition (which I actually prefer to extension), or you'll have to make AC1 extend AC... or some other weird voodoo to get this to work.
In my opinion, architectural clarity and extensibility are the main reason one would prefer to use Interfaces instead of Abstract Classes to compose your solution. There's also the question of how robust your code may become. If you extend a Class from an external package/jar, you might be stuck with that particular version of the implementation, since changes to the Abstract Class might break your code.
On the other hand...
Not all is perfect in the land of Interface usage. In some cases, trying to be a purist and use solely Interfaces with no extends at all, might lead to some unnecessary code duplication. There's really no magic rule.
To address this issue and still maintain flexibility (not compromising yourself with your only available extends), you can reuse code through composition instead of inheritance. Implement an interface, have a class with the common base code, make your "inherited" methods (from the interface), proxy to that common class (that becomes an attribute of your class), and you have the best of both worlds.
Finally, my goal as a developer (particularly in Java), is to one day be able to express an opinion that Joshua Bloch hasn't expressed much better before, to this day, I have failed to do so, so I leave this link to Effective Java, which explains this last point much better then I'm able to:
Effective Java