nouvelle
hérite de la
classe ancienne
. On dit aussi que nouvelle
étend ancienne
ou que nouvelle
est dérivée de
ancienne
. nouvelle
est alors une sous-classe
de ancienne
, et ancienne
une super-classe (surclasse)
de nouvelle
.
Dans la pratique, cela signifie qu'une instance de nouvelle
aura la possibilité d'utiliser des méthodes
définies dans ancienne
.
Lorsque l'on code la classe nouvelle
, on a la possibilité de
remplacer des méthodes de la super-classe (classe parente), simplement en
définissant une méthode avec le même nom et les mêmes
paramètres. On remarquera
qu'il n'est pas possible de remplacer un constructeur, puisque celui-ci
porte le nom de la classe dans laquelle il est déclaré, et que le nom des
deux classes diffère obligatoirement.
Nous disions précédemment qu'il est possible de modifier une classe sans avoir
à la réécrire complètement. Pratiquement, on déclare des méthodes supplémentaires
ou des méthodes portant le même nom que les méthodes de la super-classe. Dans ce
dernier cas, on masque l'ancienne méthode. Le mot clé super
désigne
la classe parente et on peut alors faire appel à ses méthodes ou
variables si
celles-ci ont été masquées par des variables locales de même nom (voir
visibilité des variables). Lorsque l'on écrit
super.M()
, on fait appel à la méthode M()
de la super-classe.
En Java, toutes les classes sont dérivées de la classe spéciale Object
.
C'est la racine de la hiérarchie des classes. Cela veut dire que toutes les
classes Java possèdent un certain nombre de méthodes. La documentation des
API disponible chez Sun les explique.
Ci-dessous, vous trouverez la classe Crayon
, et la classe
CrayonCouleur
qui l'étend.
class Crayon {
protected int longueur = 100; // en millimetres
protected int diametre = 5; // en millimetres
// cree un crayon standard
public Crayon() {
}
// cree un crayon de longueur l et de diametre d
public Crayon(int l,int d) {
longueur = l;
diametre = d;
}
public int quelleLongueur() {
return longueur;
}
public int quelDiametre() {
return diametre;
}
public void changeLongueur(int nouvelleLongueur) {
longueur = nouvelleLongueur;
}
}
class CrayonCouleur extends Crayon {
protected String couleur = "gris";
public CrayonCouleur() {
super();
}
public CrayonCouleur(int l,int d,String c) {
super(l,d); // initialise les variables longueur
// et diametre en utilisant le
// constructeur de la "superclass"
couleur = c;
}
public CrayonCouleur(String c) {
super();
couleur = c;
}
public String quelleCouleur() {
return couleur;
}
public void changeCouleur(String nouvelleCouleur) {
couleur = nouvelleCouleur;
}
}