Association and aggregation both express connections between instances of classes with constraints on things like number and direction of navigability. What this means is that you have a choice. And in fact one of the major changes that is often made in moving from the analysis class model to the design model is to actually replace some of the inheritance relationships with aggregations. The single most important answer is that inheritance is static. It cannot be changed at run time .
Aggregations however are far more mutable and can be changed at run time.
Aggregations are typically used where the type of an object can change over time. For example a Business Partner might be a Customer. It might be a Supplier. It might be both. Our inheritance hierarchy can't handle all of this very well.