More flexibility than static inheritance.
The Decorator pattern provides a more flexible way to add
responsibilities to objects than can be had with static (multiple)
inheritance. With decorators, responsibilities can be added and
removed at run-time simply by attaching and detaching them. In
contrast, inheritance requires creating a new class for each
additional responsibility (e.g., BorderedScrollableTextView,
BorderedTextView). This gives rise to many classes and increases the
complexity of a system. Furthermore, providing different Decorator
classes for a specific Component class lets you mix and match
responsibilities.
Decorators also make it easy to add a property twice. For example, to
give a TextView a double border, simply attach two
BorderDecorators. Inheriting from a Border class twice is error-prone
at best.