On pourra par exemple doter la classe Point d'une méthode translater, qui a deux paramètres dx et dy, de type double et qui applique à un point une translation selon le vecteur (dx, dy). On invoque une méthode d'une instance en suffixant le nom d'un objet par le nom de la méthode, suivi par ses arguments entre parenthèses : par exemple, on invoque la méthode translater sur le point p au moyen de l'expression
p.translater(1, 1)
Dans un langage procédural, on devrait faire figurer le point p comme argument d'une procédure et écrire translater(p, 1, 1). En programmation à objets, on dit parfois que l'on envoie à l'objet p le message translater, avec les arguments 1, 1, selon l'usage consacré par le langage Smalltalk.
Voici enfin la définition de la classe Point, qui comprend deux champs, deux constructeurs et une méthode :
package geometrie; class Point { double x, y; Point() {} Point(double x, double y) { this.x = x; this.y = y; } void translater(double dx, double dy) { this.x = this.x + dx; // x = x + dx this.y = this.y + dy; // y = y + dy } }
C'est une erreur d'invoquer une méthode d'un objet qui n'existe pas. Ainsi, l'évaluation de p.translater(1, 2), quand p a été initialisé par null, provoque le déclenchement de l'exception NullPointerException, de la même façon que l'accès à un champ de p :
Point p = null; p.translater(1, 2); // ERREUR -> NullPointerException