Here is the answer,
A high cohesion and low coupling is always desired.Cohesion is closely related the various functions of a lass.Coupling is how closely this class is integrated with mplementations of other classes, that a change in any other class will result in change in this class.Hence its always better to program to interface.
If nothing depends on your class, you can change if without consequences for the rest of the system. Such a class is said to be uncoupled (and most likely useless). If members of a class do not depend on each other, the class is said to have no cohesion (no togetherness) The goal is to design software with low coupling (not none) and high cohesion. The reason is that with low coupling, changes and errors in one location will not propagate to the rest of the code, with high cohesion, code that depends on each other is kept close to each other.