INF1563 Programmation I
Méthodes abstraites et interfaces
Qu'est ce qu'une interface ?
- un ensemble des méthodes publiques à travers lesquelles on peut interagir avec un objet
(un ensemble de services visibles depuis l’extérieur)
- exemple : une interface télécommande de télévision
diverses méthodes publiques : augmenter ou diminuer le son, monter ou descendre de chaîne
- une interface est définie dans un fichier séparé avec le mot réservé
interface
- une interface contient des déclarations de constantes et de méthodes abstraites
- une méthode abstraite est une méthode sans corps (sans implémentation)
Exemple :
abstract float perimetre();
abstract float surface();
- une classe est abstraite dès qu'elle contient une méthode abstraite et elle doit
être déclarée
abstract
- une classe abstraite ne peut pas être instanciée
une classe abstraite est une classe qui contient des méthodes qui n’ont
pas été implémentées; elle sert avant tout à factoriser du code
import java.awt.Color;
abstract class Forme {
Color fond = Color.black;
abstract float perimetre(); // méthode abstraite
abstract float surface(); // méthode abstraite
void colorer(Color c) {
fond = c;
}
}
- une sous-classe d'une classe abstraite sera encore abstraite si elle ne définit
pas toutes les méthodes abstraites dont elle hérite
abstract class Polygone extends Forme {
}
- les différences entre une interface et une classe abstraite :
- les classes abstraites servent à factoriser du code, tandis que les interfaces servent à définir des contrats de service
- toutes les méthodes d'une interface sont abstraites alors qu'une classe abstraite peut avoir à la fois des méthodes non abstraites et des méthodes abstraites
- dans une interface
- toutes les méthodes d'une interface sont publiques; les mots clés
public
et abstract
sont implicites et n'apparaissent pas
- aucune méthode n'est
static
- tous les champs sont
public
, static
et final
; les mots clés static
et final
sont implicites
- il n'y a pas de constructeur
- le seul qualificatif est
public
; si l'on l'utilise, l'interface peut être utilisé par n'importe quelle classe; sinon, elle ne peut être utilisée que par les classes du même package
- contrairement aux classes, une interface peut dériver plusieurs autres interfaces
Comment implémenter des interfaces ?
interface Service {
...
}
class X implements Service {
...
}
- par l'utilisation du mot
implements
, la classe promet d'implémenter toutes les méthodes déclarées dans l'interface
- la signature d'une méthode implémentée doit être identique à celle qui apparait dans l'interface;
dans le cas contraire, la méthode est considérée comme une méthode de la classe et non de l'interface