Le polymorphisme est un principe objet qui consite à cacher derrière une même interface des objets dont les méthodes diffèrent.
L'encapsulation consiste à cacher derrière une interface visible les mécanismes de fonctionnement d'une classe. On peut donc imaginer que derrière une même interface, les opérations pourront être implémentées par des méthodes différentes, c'est-à-dire codées différemment. Ces différences seront transparentes pour les objets utilisateurs qui ne connaissent de l'opération que les paramètres nécessaires à l'exécution de la méthode et la nature du résultat éventuel attendu.
Par exemple, nous disposons de deux classes Voiture et Camion qui implémentent une interface commune Véhicule possédant une méthode payerAutoroute(). Les camions payent l'autoroute plus cher que les voitures (leur méthodes payer sont donc différentes). Le guichet d'autoroute voit passez des véhicules et appelle leur méthode payerAutoroute sans connaitre précisément leur type.