Voila un petit exemple simple sans code d'interface et classe abstraite :
L'interface :

imagine 2 classes
Humain et
Félin. Ces 2 êtres sont capables de se laver, mais de façon différente, un félin en se léchant, un humain en prenant une douche.

on va donc créer une interface
Lavable qui définit une seule méthode
laver() sans paramètre ni retour.

Les 2 classes Humain et Félin vont donc implémenter l'interface Lavable, chacune à leur méthode.
La classe abstraite :
Maintenant on voudrait ajouter tous les autres types d'animaux, ils sont tous capables de se laver, comment être sûr de ne pas oublier d'implémenter Lavable?

Tout d'abord on créé une classe
Animal. Tous les animaux héritent de cette classe.

Maintenant c'est Animal qui implémente Lavable. On a supprimé Lavable de Humain et Félin.

D'après le principe des interfaces, Animal devrait donc implémenter Lavable, mais on perdrait le comportement laver() propre à chaque animal. On va donc déclarer la classe
Animal comme étant abstraite.

En effet la définition d'une interface est que ses méthodes doivent être déclarées au maximum dans la 1ère classe non abstraite qui l'implémente. Donc Animal étant abstraite, elle n'est pas obligée de déclarer la méthode laver(). Par contre toute classe non abstraite héritant de Animal devra déclarer laver().

Mis à part ça, à quoi sert Animal? elle n'a pas beaucoup d'intérêt... Et bien on peut y définir des comportements commun, on pourrait y définir une méthode déplacer(Coordonnees position) dans laquelle on changerait la position de l'animal à un certain point.
C'est un peu long, mais j'espère avoir été assez clair. A mon avis, pour comprendre la méthode objet, il faut oublier le code et penser à des choses très simples, tout ce qui nous entoure pourrait être représenté de façon objet.

Partager