Abstract Keyword In Java

Bonjour, mes amis ! Asseyez-vous, prenez un café. Aujourd'hui, on papote d'un truc un peu abstrait, justement : le mot-clé abstract en Java. Ça sonne compliqué, hein ? Mais promis, on va rendre ça super simple.

Imaginez un peu : vous êtes architecte. Vous dessinez les plans d'une maison. Mais au lieu de dessiner toutes les maisons dans les moindres détails, vous créez un plan de base, un squelette. Ce squelette dit : "Voilà, il y aura des murs, un toit, des fenêtres, une porte." Mais il ne dit pas exactement quel type de murs, quel type de toit, etc. Vous laissez ça aux constructeurs, à ceux qui vont réellement bâtir la maison.

C'est exactement ce que fait le mot-clé abstract en Java. Il vous permet de définir une classe ou une méthode qui n'est pas entièrement définie. C'est un peu comme un contrat. Un contrat qui dit : "Hé, vous devez implémenter ça !".

Les Classes Abstraites : Le Squelette

Alors, comment ça marche, concrètement ? Une classe abstraite, c'est une classe qu'on ne peut pas instancier directement. On ne peut pas faire new MaClasseAbstraite(). Pourquoi ? Parce qu'elle est incomplète ! Elle contient des trous, des parties qui doivent être complétées par d'autres classes, ses enfants, ses héritiers.

Pour déclarer une classe abstraite, on utilise le mot-clé abstract devant le mot-clé class. C'est aussi simple que ça !

Exemple :

abstract class Forme {
  // ...des attributs, par exemple la couleur
  abstract double calculerAire(); // Méthode abstraite
}

An Introduction to Methods in Java with Examples | Simplilearn
An Introduction to Methods in Java with Examples | Simplilearn

Regardez bien. La méthode calculerAire() est déclarée abstract. Elle n'a pas de corps, pas d'implémentation. Elle se termine par un point-virgule. C'est comme dire : "Cette méthode, elle existe, mais je ne vous dis pas comment elle calcule l'aire. C'est à vous de le faire !". Elle impose aux classes qui héritent de Forme de définir comment on calcule l'aire. Elles sont obligées de l'implémenter, sinon, elles seront aussi abstraites !

Pourquoi utiliser les classes abstraites ?

Bonne question ! Les classes abstraites servent à plusieurs choses :

  • Définir un contrat : Comme on l'a vu, elles obligent les classes filles à implémenter certaines méthodes. C'est une façon de s'assurer que toutes les formes, par exemple, savent calculer leur aire.
  • Factoriser du code : On peut mettre du code commun à toutes les classes filles dans la classe abstraite. Par exemple, la couleur d'une forme. Ainsi, on évite de répéter le même code partout. C'est plus propre, plus maintenable !
  • Polymorphisme : On peut traiter un ensemble d'objets de classes différentes (cercle, carré, triangle) comme des objets de type Forme. Et ça, c'est puissant !

Les Méthodes Abstraites : Les Obligations

On en a déjà parlé, mais c'est important de bien comprendre. Une méthode abstraite, c'est une méthode déclarée avec le mot-clé abstract, qui n'a pas de corps. Elle se termine par un point-virgule. Elle sert juste à dire : "Voilà, cette méthode, vous devez la définir !".

Exemple :

Abstract Keyword in Java - Scaler Topics
Abstract Keyword in Java - Scaler Topics

abstract void dessiner();

Si une classe contient au moins une méthode abstraite, alors la classe elle-même doit être déclarée abstraite. C'est la règle ! On ne peut pas avoir une classe concrète (non abstraite) qui contient des méthodes abstraites. C'est comme avoir un plan de maison avec des murs manquants. Ça ne tient pas debout !

Implémenter une Méthode Abstraite

Alors, comment on fait pour implémenter une méthode abstraite ? C'est simple : on crée une classe qui hérite de la classe abstraite, et on définit le corps de la méthode abstraite dans cette classe fille. On utilise le mot-clé @Override (c'est une bonne pratique !) pour indiquer qu'on redéfinit une méthode héritée.

Exemple :

69. Abstract keyword in java - YouTube
69. Abstract keyword in java - YouTube

class Cercle extends Forme {
  private double rayon;

  public Cercle(double rayon) {
    this.rayon = rayon;
  }

  @Override
  double calculerAire() {
    return Math.PI * rayon * rayon;
  }
}

Ici, la classe Cercle hérite de la classe abstraite Forme. Elle doit implémenter la méthode calculerAire(). Et elle le fait, en calculant l'aire du cercle avec la formule appropriée. Maintenant, on peut créer une instance de Cercle et utiliser sa méthode calculerAire().

Abstract vs Interface: Le Duel

Ah, une question qui revient souvent : quelle est la différence entre une classe abstraite et une interface ? C'est vrai que les deux permettent de définir un contrat. Mais il y a des différences importantes.

Une interface, c'est un contrat pur. Elle ne contient que des déclarations de méthodes (implicitement abstraites) et des constantes. Elle ne contient pas d'implémentation. C'est un contrat plus strict qu'une classe abstraite.

Abstract Keyword In Java - Classes & Methods With Examples // Unstop
Abstract Keyword In Java - Classes & Methods With Examples // Unstop

Une classe abstraite peut contenir des méthodes abstraites, mais aussi des méthodes concrètes (avec une implémentation). Elle peut aussi avoir des attributs (variables). Elle est plus flexible qu'une interface.

Une classe peut implémenter plusieurs interfaces (c'est l'héritage multiple). Mais une classe ne peut hériter que d'une seule classe abstraite (c'est l'héritage simple).

Alors, lequel choisir ? Si vous voulez définir un contrat pur, sans implémentation, utilisez une interface. Si vous voulez factoriser du code et définir un contrat partiel, utilisez une classe abstraite. La décision dépend de votre besoin !

Pour résumer : une classe abstraite c'est comme un plan de maison incomplet, une méthode abstraite c'est comme une obligation de compléter ce plan. Facile, non ?

Et voilà ! On a fait le tour de la notion d'abstract en Java. J'espère que c'était clair et pas trop ennuyeux. N'hésitez pas à expérimenter, à coder, à faire des erreurs. C'est comme ça qu'on apprend ! Et rappelez-vous, même les concepts les plus abstraits peuvent devenir concrets avec un peu de pratique. Maintenant, profitez de votre café et passez une excellente journée ! Et n'oubliez pas que même en programmation, il y a toujours une solution, même si elle est un peu... abstraite au début !