Un langage admet un typage statique s'il est possible de vérifier à la compilation la cohérence des types de toutes les expressions, et ainsi d'éliminer la possibilité d'erreurs à l'exécution dues à des opérations qui ne respecteraient pas les contraintes de type. Le typage statique est un critère de sécurité essentiel. La plupart des langages de programmation contemporains admettent un typage statique : C, CAML, Java. Il existe cependant des langages non-typés comme Lisp et Prolog.
Le mécanisme de liaison est celui qui associe un objet à un nom. Cette association est déterminée d'une part par le texte du programme, notamment par la portée lexicale des noms dans les blocs, et d'autre part par l'environnement d'exécution. C'est ainsi qu'un nom déclaré d'un certain type peut désigner une instance d'un sous-type :
Point pc = new PointColore(2, 3, java.awt.Color.pink), pi = new PointImmobile(2, 3), p = Math.random()>0.5 ? pc : pi; p.translater(1,1);
La troisième affectation est correcte, car de la forme << type = sous-type >> : le type du nom p est Point, tandis que le type de la valeur affectée à p est PointColore ou PointImmobile. La méthode translater(double, double) de la classe Point est redéfinie dans la classe PointImmobile. L'évaluation de l'expression p.translater(1, 2) consiste à invoquer la méthode translater(double, double) définie dans la classe de l'objet désigné par p, soit celle de PointImmobile, soit celle de PointColore. La liaison du nom translater à l'une de ces méthodes ne peut être réalisée en général qu'à l'exécution, quand le type réel de p est connu. Il s'agit d'une liaison tardive, qui est une des particularités des langages orientés objets. Ce mécanisme est propre aux méthodes et ne s'applique pas aux champs.