Na programação orientada a objetos, a herança simples pode ser usada para estender comportamento. No entanto, ela possui algumas limitações:
I. Com herança, só é possível estender comportamento em tempo de compilação. Não é possível estender comportamento em tempo de execução;
II. A interface do comportamento estendido deve ser mantida. Em outras palavras, a assinatura dos métodos correspondentes ao comportamento de uma classe deve ser a mesma nas subclasses que estendem esse comportamento. Não é possível, por exemplo, adicionar um parâmetro ou modificar o tipo de retorno de um método referente ao comportamento estendido;
III. Com herança simples, caso exista um grande número de extensões independentes de comportamento, seria necessário um número ainda maior de subclasses para cobrir todas as combinações possíveis, o que é pouco prático; e
IV. Na herança, todas as instâncias da subclasse tem obrigatoriamente seu comportamento estendido. Não é possível fazer com que apenas algumas instâncias tenham o comportamento estendido sem criar uma outra subclasse.
Uma alternativa à herança para extensão de comportamento é o padrão de projeto Decorador (em inglês, Decorator), cuja estrutura é exemplificada no diagrama de classes a seguir:

Quais das limitações anteriores podem ser superadas com o uso do padrão Decorador?