You are on page 1of 12

Le Langage

HéritageJava

Page 1
Héritage et classe dérivée

n L’héritage permet de créer une classe par extension ou spécialisation d’une


classe existante.

n Chaque niveau (classe) amène un complément ou une spécialisation des


caractéristiques du niveau supérieur auquel il est rattaché.

n Dès lors qu'une caractéristique (attribut ou méthode) est définie à un niveau elle
reste valable pour tous les sous-niveaux affiliés.

n Ce mécanisme est appelé l'héritage. En java, si une classe D hérite d'une classe
B, la classe D est appelée classe dérivée et B classe de base.

n Java ne supporte que de l’héritage simple.

copyright ©Thierry Douchet 2


Janvier 2006
Une classe Personne

n Une personne est définie par un nom , un prénom et un age.

n Une personne a une méthode anniversaire() qui lui permet de changer d’age et
une méthode afficher () qui affiche l’ensemble de ses attributs :

copyright ©Thierry Douchet 3


Janvier 2006
Modélisation de l’héritage en UML

n Nous voulons maintenant réaliser une classe Stagiaire. Un Stagiaire possède un


nom , un prénom , un age et un cours.

n Un Stagiaire est donc une personne qui suit un cours. Un Stagiaire hérite donc
de la classe Personne :

copyright ©Thierry Douchet 4


Janvier 2006
La classe Personne

class Personne
{ private String nom;
private String prenom;
private int age;

public Personne ()
{ nom ="" ; prenom = "" ; age = 0 ; }

public Personne ( String _nom , String _prenom , int _age )


{ nom = _nom ; prenom = _prenom ; age = _age ; }

public String getNom () { return nom ; }


public void setNom ( String _nom ) { nom = _nom ; }

public void afficher()


{ System.out.println ( nom + " " + prenom + " " + age ); }

public void anniversaire() { age++ ; }


}

copyright ©Thierry Douchet 5


Janvier 2006
La classe Stagiaire

class Stagiaire extends Personne // héritage en Java -> extends


{
private String cours;

public Stagiaire()
{ cours= "" ; }

public Stagiaire( String _nom , String _prenom , int _age ,String _cours )
{ super ( _nom , _prenom , _age ); // appel du constructeur de la classe de ba
cours = _cours;
}

public String getCours () { return cours ; }


public void setCours ( String _cours ) { cours = _cours ; }

public void afficher ()


{ super.afficher ();
System.out.println ("Cours : cours" + cours );
}
}
copyright ©Thierry Douchet 6
Janvier 2006
Commentaire

n Un constructeur d’une classe dérivée doit toujours appeler un constructeur de


sa classe de base.

n L ’appel d’un constructeur s’effectue avec le mot clé « super » en fournissant les
arguments nécessaire :

super ( _nom , _prenom , _age );

n L’appel peut être implicite, dans ce cas c’est le constructeur par défaut de la
classe de base qui est appelé :

public Stagiaire()
{
// super () ; est effectué de façon implicite.
cours= "" ;
}

n On peut redéfinir une méthode de la classe de base si elle ne répond pas au


exigence de la classe dérivée : méthode « afficher »

copyright ©Thierry Douchet 7


Janvier 2006
Exemple (suite)

class Demo
{
public static void main (String args [ ])
{
Personne pers1;
Stagiaire stag1;
pers1 = new Personne ("Bond" , "james" , 7 );
stag1 = new Stagiaire ( "Jones" , "Indiana" , 31 , "java" );
pers1.afficher();
stag1.afficher();
pers1.anniversaire();
stag1.anniversaire();
}
}

n On peut appliquer sur un objet l’ensemble des méthodes de sa hiérarchie.

copyright ©Thierry Douchet 8


Janvier 2006
La classe dérivée "stagiaire" (suite)

n Les caractéristiques héritées sont tributaires des attributs d'accès des membres
de la classe de base.

n Les membres privés de la classe "Personne" sont inaccessibles pour les


méthodes de la classe "Stagiaire" :

class Stagiaire extends Personne


{ public void afficher()
{ System.out.println ( nom + prenom + age + cours ) ; // erreur
}
}

n Les membres publics de la classe "Personne" sont bien-sûr accessibles pour les
méthodes de la classe "Stagiaire" :

class Stagiaire extends Personne


{ public void afficher()
{ super.afficher(); System.out.println ("Cours : " , cours ) ;
}
}
copyright ©Thierry Douchet 9
Janvier 2006
L'attribut d'accès protected

n L'attribut d'accès protected permet de concéder un droit d’accès pour les


classes dérivées.

class Personne
{
protected String nom;
}

class Stagiaire extends Personne


{
protected String cours;
public void afficher()
{
System.out.println ( nom + cours);
}
}

n Si le nom est « protected », on peut y accéder dans la classe dérivée.

copyright ©Thierry Douchet 10


Janvier 2006
L’attribut protected

n Un attribut protected reste inaccessible pour une instance d’une classe :

class Demo
{
public static void main (String args [ ])
{
Personne pers1;
pers1 = new Personne ("Bond" , "james" , 7 );
pers1.nom = "Jones" ; // erreur nom est inaccessible
pers1.afficher();
}
}

copyright ©Thierry Douchet 11


Janvier 2006
Le qualificatif final

n Le qualificatif final peut être utilisé de différentes manières :

u appliqué aux attributs, il indique que le contenu ne doit pas évoluer (définition de
constantes).

u appliqué aux méthodes, il spécifie que la méthode ne pourra pas être redéfinie dans
la classe dérivée.

u appliqué aux classes, il indique qu’aucune classe ne pourra dériver de celle-ci.

copyright ©Thierry Douchet 12


Janvier 2006

You might also like