1
Département de génie électrique et de génie informatique
GEI 442 : Structures de données et algorithmes
Chapitre 1 : Langage JAVA
Partie 4 : Héritage
Université de Sherbrooke
Ahmed KHOUMSI 1
Hiver 2001
Notes de cours
GEI 442 : STRUCTURES DE DONNÉES ET ALGORITHMES
Ahmed KHOUMSI
Chapitre 1
Ahmed KHOUMSI
Chapitre 1 : Langage JAVA
Partie 4 : Héritage et interfaces
Ahmed KHOUMSI
Département de génie électrique et de génie informatique
GEI 442 : Structures de données et algorithmes
Chapitre 1 : Langage JAVA
Partie 4 : Héritage
Université de Sherbrooke
Ahmed KHOUMSI 2
Hiver 2001
Classe dérivée
extends : ce mot-clé permet de déclarer qu ’une classe est dérivée d ’une autre
classe
public class A extends B
{
...
}
Classe dérivée :
- hérite de tous les champs de données de la classe mère
- peut ajouter de nouveaux champs de données
- hérite de toutes les méthodes de la classe mère
elle peut les accepter telles quelles ou les redéfinir
- peut définir de nouvelles méthodes
Quelques règles :
- les méthodes public de la classe mère ne peuvent pas être redéfinies
comme étant private dans la classe dérivée
- les méthodes de la classe mère qui ne sont pas spécifiées dans la classe
dérivée sont héritées sans changement, sauf dans le cas du constructeur
(voir plus loin)
A est une sous-classe (ou classe dérivée) de B
B est une super-classe (ou classe mère) de B
2
Département de génie électrique et de génie informatique
GEI 442 : Structures de données et algorithmes
Chapitre 1 : Langage JAVA
Partie 4 : Héritage
Université de Sherbrooke
Ahmed KHOUMSI 3
Hiver 2001
Règles de visibilité, mot-clé protected
Un membre d ’une classe C :
- qui est public est visible par toutes les autres classes
- qui est private n ’est visble par aucune autre classe
Si on veut qu ’un membre de C soit visible uniquement par les classes qui
dérivent de C, alors on le déclare protected
Département de génie électrique et de génie informatique
GEI 442 : Structures de données et algorithmes
Chapitre 1 : Langage JAVA
Partie 4 : Héritage
Université de Sherbrooke
Ahmed KHOUMSI 4
Hiver 2001
Exemple de classe dérivée
On considère la classe Ballon (voir partie 3, page 4)
Classe dérivée : Balle = Ballon avec poids
public class Balle extends Ballon
{
// méthode ajoutée
public int pese( ) { return poids; }
// méthodes redéfinies
public void gonfle(int x) { if x > 0 { vol = vol + x; poids = poids + k*x; } }
public void degonfle(int x) { if ( (x > 0) && (x <= vol) ) { vol = vol - x; poids = poids - k*x; } }
// méthode héritée sans changement : volume( )
// données ajoutées
private int poids;
private final static int k=2;
// donnée héritée : vol;
}
Remarque : Il faut que vol soit déclarée protected dans la classe Ballon
car les méthodes redéfinies utilisent vol
3
Département de génie électrique et de génie informatique
GEI 442 : Structures de données et algorithmes
Chapitre 1 : Langage JAVA
Partie 4 : Héritage
Université de Sherbrooke
Ahmed KHOUMSI 5
Hiver 2001
Constructeur de classe dérivée
Si la classe dérivée ne possède pas de constructeur, alors un constructeur sans
argument est utilisé par défaut. Celui-ci :
(a) appelle le constructeur sans argument de la classe mère pour la partie
héritée
(b) applique les initialisations par défaut pour les champs de données ajoutés
Le point (a) est appliqué même si la classe dérivée possède un constructeur
Département de génie électrique et de génie informatique
GEI 442 : Structures de données et algorithmes
Chapitre 1 : Langage JAVA
Partie 4 : Héritage
Université de Sherbrooke
Ahmed KHOUMSI 6
Hiver 2001
Méthode super
Elle permet à la classe dérivée d ’appeler un constructeur de la classe mère
La méthode super :
- doit être appelée (par la classe dérivée) avec des arguments qui sont
compatibles avec un constructeur de la classe mère
- ne peut être utilisée que dans la première ligne d ’un constructeur de la
classe dérivée
Si elle n ’est pas utilisée, alors un appel à super sans argument est
automatiquement généré
4
Département de génie électrique et de génie informatique
GEI 442 : Structures de données et algorithmes
Chapitre 1 : Langage JAVA
Partie 4 : Héritage
Université de Sherbrooke
Ahmed KHOUMSI 7
Hiver 2001
Exemple d ’utilisation de la méthode super
On reconsidère les classes Ballon et Balle
On avait défini deux constructeurs pour la classe Ballon (voir partie 3, page 6)
public Ballon( int x ) { vol = x; }
public Ballon( ) { vol =0; }
On peut définir les trois constructeurs suivants pour la classe Balle
public Balle( int x, int y )
{
super( x ); // appel de Ballon( x )
poids = y;
}
public Balle( int x )
{
super( x );
poids = 0;
}
public Balle( )
{
super( ); // appel de Ballon( ), inutile
poids = 0;
}
Département de génie électrique et de génie informatique
GEI 442 : Structures de données et algorithmes
Chapitre 1 : Langage JAVA
Partie 4 : Héritage
Université de Sherbrooke
Ahmed KHOUMSI 8
Hiver 2001
Méthodes finales
final : ce mot-clé permet de spécifier qu ’une méthode peut être héritée sans
possibilité d ’être redéfinie
Exemple :
- Dans la classe Ballon :
- on peut avoir : public final int volume( ) { return vol; }
- si on avait spécifié gonfle et degonfle comme étant final,
alors on n ’aurait pas pu les redéfinir dans Balle (voir page 4)
- Dans la classe Balle : on peut avoir :
public final int pese( ) { return poids; }
Rappel : lorsque le mot-clé final est utilisé pour une donnée initialisée,
alors cette donnée ne peut plus être modifiée (constante)
5
Département de génie électrique et de génie informatique
GEI 442 : Structures de données et algorithmes
Chapitre 1 : Langage JAVA
Partie 4 : Héritage
Université de Sherbrooke
Ahmed KHOUMSI 9
Hiver 2001
Classes finales
Une classe spécifiée final ne peut pas être étendue (héritée)
Exemple :
si Ballon avait été spécifiée public final class Ballon
alors : - on n ’aurait pas pu définir Balle comme une classe dérivée de Ballon
- on aurait dû définir Balle avec tous ses champs, indépendamment de
Ballon
Remarque : Une classe dont toutes les méthodes sont final n ’est pas forcément
final
Département de génie électrique et de génie informatique
GEI 442 : Structures de données et algorithmes
Chapitre 1 : Langage JAVA
Partie 4 : Héritage
Université de Sherbrooke
Ahmed KHOUMSI 10
Hiver 2001
Redéfinition de méthodes dans une classe dérivée
On peut redéfinir une méthode en fournissant une nouvelle méthode qui a
la même signature (càd même nom et arguments)
La nouvelle méthode (de la classe dérivée) :
- doit retourner le même type que la méthode d ’origine (de la classe mère)
- ne doit pas ajouter de nouvelles exceptions dans la liste throws
- peut faire appel à la méthode d ’origine à l ’aide de super
Exemple : Classes Ballon et Balle
Les méthodes gonfle et degonfle de Balle peuvent être réécrites comme suit :
public void gonfle(int x)
{
if x > 0 { super.gonfle( x ); poids = poids + k*x; }
}
public void degonfle(int x)
{
if ( (x > 0) && (x <= vol) ) { super.degonfle( x ); poids = poids - k*x; }
}
Avec cette nouvelle définition, vol peut être spécifié private au lieu de protected
(voir page 4)
1 / 13 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!