L'héritage de classe définit l'implémentation d'un objet à partir de l'implémentation d'un autre objet. C'est un mécanisme de partage de code et de la représentation.
L'héritage d'interface (sous-typage), décrit comment un objet peut être utilisé à la place d'un autre. Il réduit de façon significative l'interdépendance des implémentations d'un sous-systèmes à l'autre.
Principe : Programmer pour une interface, non pour un développement.
Cela conduit d'une part à ne pas déclarer les variables comme instances de classes concrètes, mais comme se conformant à une interface; d'autre part à l'utilisation des modèles créateurs.
Les deux techniques les plus courantes pour la réutilisation sont :
Principe : Préférer la composition d'objets à l'héritage de classes.