Il n'y a pas de difficulté pour définir ces trois classes dans le paquet geometrie (on notera que si ces classes devaient être déclarées publiques, il faudrait les définir dans des unités de compilation distinctes, chacune portant le nom de sa classe) :
package geometrie; class Cercle { Point centre; double rayon; Cercle(Point centre, double rayon) { this.centre = centre; this.rayon = rayon; } // ... } class Rectangle { Point sg, id; double rayon; Rectangle(Point sg, Point id) { this.sg = sg; this.id = id; } // ... }
On notera que la classe Cercle a un champ centre dont le type, Point est une classe. Ceci ne signifie pas qu'une instance de Cercle contienne une instance de Point. La valeur d'un champ est toujours une valeur, ce ne peut pas être un objet ; la valeur de centre est une référence à un objet (figure 4.1). De la même façon, la classe Rectangle a deux champs sg et id de type Point qui désignent les sommets « supérieur gauche » et « inférieur droit » du rectangle. Les instances des classes Cercle et Rectangle sont des exemples d'objets composés à partir d'autres objets (ici, des points). Il est fréquent qu'une classe soit définie par composition à partir d'autres classes.