L'héritage en Java : classe et interface

L'héritage en java est une propriété simple et puissante dans le concept orienté objet, il permet de réécrire les attributs et les méthodes de la classe mère dans la classe fille, et de cette façon qu'une autre sous classe peut hériter elle aussi de la classe fille. Java utilise cette propriété dans toutes les classes.

Le mot clé utilisé pour l'héritage dans java est extends. L'héritage multiple est interdit par contre il est autorisé pour les interfaces.

La classe Object

Lors de la programmation on remarque que des méthodes se répètent partout comme: toObject(), equals(), wait()...etc. C'est parce que en java toutes les classes héritent de la super classe Object qui est la racine de toute l'hiérarchie.

Hiérarchie arborescence orienté objet en java
Toutes les classes héritent de Object

Exemple

Dans cet exemple, on a déclaré une classe personne avec les attributs nom et adresse. Les deux sous classes héritent de Personne: la première classe directeur et la deuxième classe Employé qui a comme attribut en plus salaire.


class Personne
{
public String nom;
public String adresse;
}
class Employe extends Personne
{
int salaire;
public Employe(String nom, String adresse, int salaire)
{
this.nom=nom;
this.adresse=adresse;
this.salaire=salaire;
}
}
class Directeur extends Personne
{
public Directeur()
{
this.nom= "nom";
this.adresse= "adresse";
}
}

remarque:
La classe fille hérite les membres déclarés protected et public et hérite aussi les membres private si elle se trouve dans le même package de la classe mère.

Le mot clé super en java

On peut développer la classe Personne pour que d'autres classes héritent d'elle en sous classes, si on considère que dans cette entreprise, il existe plusieurs fonctions: ingénieur, comptable, secrétaire...etc.

uml employé ingénieur comptable

class Ingenieur extends Employe
{
public Ingenieur()
{
super("nom","adresse",110);
}

public void concevoir(){System.out.println("Je suis ingénieur");}
public void developper(){};
}

class Comptable extends Employe
{
public Comptable()
{
this.nom= "nom";
this.adresse= "adresse";
this.salaire = 3000;
}

public void gererLesComptes(){};
public void gererLesBilans(){};
}
On voit la structure sous forme d'hiérarchie, cette arborescence nous aide a bien comprendre la structure de notre programme. La différence entre les deux classes Ingénieur et Employé est l'utilisation du mot clé super dans Ingénieur qui appelle le constructeur de la classe mère directement. Par défaut, la méthode super() invoque le constructeur sans arguments et super(p1, p2,...) invoque le constructeur avec arguments.

Le mot clé super est aussi utilisé pour appeler les méthodes de la classe supérieure. Voici un exemple:


class Ingenieur_reseaux extends Employe
{
public Ingenieur_reseaux ()
{
super("nom","adresse",3100);
}

public void concevoir(){
super.concevoir();
System.out.println("J'ai conçu l'architecture réseau de l'entreprise");
}
}
Sans super la méthode concevoir() déclarée dans le constructeur Ingénieur_réseaux va être appelée à la place de la méthode concevoir() déclarée dans ingénieur, donc pour faire référence à la méthode mère il faut ajouter le mot clé super.

Exécution:

Je suis ingénieur
J'ai conçu l'architecture réseau de l'entreprise

Héritage d'interfaces en java

L'héritage multiple est autorisé pour les interfaces.

interface imprimer{
void imprimer();
}
interface afficher{
void afficher();
}
interface interfaceIA extends imprimer,afficher{
void imprimer_afficher();
}
class testIA implements interfaceIA{

void imprimer(){System.out.println("Impression en cours")};
void afficher(){System.out.println("Impression terminée")};

public static void main(){
testIA test = new testIA();
test.imprimer();
test.afficher();
}
}