Some Java APIs provide a large number of interfaces and few classes. For example, the Stellent/Oracle UCM API is composed of roughly 80% interfaces/20% classes, and many of the classes are just exceptions.
What is the technical reason for preferring interfaces to classes? Is it just an effort to minimize coupling? To improve encapsulation/information hiding? Something else?
It would be to maximize their flexibility in changing the underlying classes behind the scenes.
As long as the interfaces/contracts remain the same, they can change the implementation classes all they want without worrying about affecting people who are using their library.