Classes abstraites, interfaces et héritage multiple
CHAPITRE 14
294
2.1 Définition d’une interface
Une interface ne contient que des signatures de méthodes (et le type de leur éventuel
résultat). Nous conviendrons que cette notation :
interface I
{ méthode f (entier)
réel méthode g (entier, réel)
}
définit une interface nommée I, disposant de deux méthodes f et g, ayant les signatures indiquées.
Ici, contrairement à une classe abstraite, une interface ne contient ni attributs, ni définition de
méthodes. Elle ne contient que des méthodes retardées, de sorte qu’il n’est pas nécessaire de
mentionner ce point.
Remarque
Pour l’instant, on serait tenté de penser qu’une interface n’est qu’une classe abstraite ne comportant que des méthodes retardées. En fait, comme nous allons le voir ci-dessous, une interface ne s’utilise pas comme une classe.
2.2 Implémentation d’une interface
Lors de la définition d’une classe (ici A), nous convenons que nous pouvons préciser qu’elle
«i mplémente » une interface donnée (ici I), de cette façon :
classe A implémente I
{ .....
}
Cela signifie qu’on s’engage à ce que A définisse convenablement les méthodes présentes
dans I. On a donc la garantie (grâce aux vérifications opérées par le traducteur) que A dispose des méthodes f et g, avec les bonnes signatures et le bon type de résultat.
On notera bien que le fait qu’une classe implémente une interface donnée ne l’empêche nullement de disposer d’autres méthodes. Autrement dit, A n’est pas nécessairement une
implémentation de I. On sait simplement que A dispose au minimum des méthodes prévues
dans l’interface I.
D’ailleurs, une même classe peut implémenter plusieurs interfaces, comme dans cet
exemple :
interface I1
{ méthode f
}
interface I2
{ entier méthode g (caractère)
méthode h (entier)
}
CHAPITRE 14
294
2.1 Définition d’une interface
Une interface ne contient que des signatures de méthodes (et le type de leur éventuel
résultat). Nous conviendrons que cette notation :
interface I
{ méthode f (entier)
réel méthode g (entier, réel)
}
définit une interface nommée I, disposant de deux méthodes f et g, ayant les signatures indiquées.
Ici, contrairement à une classe abstraite, une interface ne contient ni attributs, ni définition de
méthodes. Elle ne contient que des méthodes retardées, de sorte qu’il n’est pas nécessaire de
mentionner ce point.
Remarque
Pour l’instant, on serait tenté de penser qu’une interface n’est qu’une classe abstraite ne comportant que des méthodes retardées. En fait, comme nous allons le voir ci-dessous, une interface ne s’utilise pas comme une classe.
2.2 Implémentation d’une interface
Lors de la définition d’une classe (ici A), nous convenons que nous pouvons préciser qu’elle
«i mplémente » une interface donnée (ici I), de cette façon :
classe A implémente I
{ .....
}
Cela signifie qu’on s’engage à ce que A définisse convenablement les méthodes présentes
dans I. On a donc la garantie (grâce aux vérifications opérées par le traducteur) que A dispose des méthodes f et g, avec les bonnes signatures et le bon type de résultat.
On notera bien que le fait qu’une classe implémente une interface donnée ne l’empêche nullement de disposer d’autres méthodes. Autrement dit, A n’est pas nécessairement une
implémentation de I. On sait simplement que A dispose au minimum des méthodes prévues
dans l’interface I.
D’ailleurs, une même classe peut implémenter plusieurs interfaces, comme dans cet
exemple :
interface I1
{ méthode f
}
interface I2
{ entier méthode g (caractère)
méthode h (entier)
}
