Accéder au contenu principal
Documents
Tableaux JavaProgrammation orientée objet en JavaTraitement des fichiers en JavaIntroduction To JavaLes bases du langage JavaMots-clés Java

mot-clé abstrait en Java

Le mot-clé abstract en Java est utilisé pour déclarer une classe ou une méthode qui ne peut pas être instanciée directement ou qui doit être implémentée par des sous-classes, respectivement. Il s'agit d'un élément clé du mécanisme d'abstraction de Java, qui permet aux développeurs de définir des classes et des méthodes abstraites fournissant un modèle pour d'autres classes.

Utilisation

Classe abstraite

Une classe abstraite est une classe qui ne peut pas être instanciée seule et qui peut contenir des méthodes abstraites qui doivent être implémentées par les sous-classes.

Méthode abstraite

Une méthode abstraite est une méthode déclarée sans implémentation. Les sous-classes de la classe abstraite doivent fournir une implémentation de ces méthodes.

Syntax

Classe abstraite

abstract class ClassName {
    // Abstract methods
    abstract void methodName();
    
    // Concrete methods
    void concreteMethod() {
        // Method body
    }
}

Méthode abstraite

abstract void methodName();

Exemples

Exemple 1 : Classe et méthode abstraites

abstract class Animal {
    // Abstract method
    abstract void makeSound();

    // Concrete method
    void sleep() {
        System.out.println("Sleeping...");
    }
}

class Dog extends Animal {
    // Implementing the abstract method
    void makeSound() {
        System.out.println("Bark");
    }
}

public class AbstractExample {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.makeSound(); // Outputs: Bark
        dog.sleep();     // Outputs: Sleeping...
    }
}

Dans cet exemple, Animal est une classe abstraite dotée d'une méthode abstraite makeSound() et d'une méthode concrète sleep(). La classe Dog étend Animal et fournit une implémentation de la méthode makeSound().

Exemple 2 : Méthodes abstraites multiples

abstract class Shape {
    abstract void draw();
    abstract double area();
}

class Circle extends Shape {
    private double radius;

    Circle(double radius) {
        this.radius = radius;
    }

    void draw() {
        System.out.println("Drawing Circle");
    }

    double area() {
        return Math.PI * radius * radius;
    }
}

public class ShapeExample {
    public static void main(String[] args) {
        Circle circle = new Circle(5);
        circle.draw(); // Outputs: Drawing Circle
        System.out.println("Area: " + circle.area()); // Outputs: Area: 78.53981633974483
    }
}

Ici, Shape est une classe abstraite avec deux méthodes abstraites : draw() et area(). Circle étend Shape et fournit des implémentations pour les deux méthodes abstraites.

Conseils et bonnes pratiques

  • Utilisez des classes abstraites pour le code partagé: Utilisez des classes abstraites lorsque vous avez du code partagé qui doit être hérité par plusieurs sous-classes. Les classes abstraites peuvent contenir des méthodes abstraites et concrètes.
  • Mise en œuvre obligatoire: Assurez-vous que toutes les méthodes abstraites d'une classe abstraite sont implémentées par ses sous-classes.
  • Cannot Instantiate: N'oubliez pas que vous ne pouvez pas créer directement des instances d'une classe abstraite. Vous devez créer une instance d'une sous-classe qui implémente toutes les méthodes abstraites.
  • Utilisez des méthodes abstraites pour les interfaces: Si vous avez une classe qui servira de base avec des méthodes qui doivent être surchargées, utilisez des méthodes abstraites pour appliquer ce contrat.
  • Combiner avec des interfaces: Les classes abstraites peuvent implémenter des interfaces et fournir des implémentations pour certaines méthodes, tout en laissant d'autres méthodes abstraites à implémenter par les sous-classes.  
    abstract class Vehicle implements Movable {
        abstract void start();
    }
  • Constructeur dans une classe abstraite: Les classes abstraites peuvent avoir des constructeurs, qui peuvent être appelés lors de l'instanciation d'une sous-classe.  
    abstract class Base {
        Base() {
            System.out.println("Base Constructor");
        }
    }
  • Classes abstraites et interfaces : Utilisez des classes abstraites lorsque vous devez partager du code entre des classes étroitement liées, et utilisez des interfaces lorsque vous devez définir un contrat qui peut être mis en œuvre par n'importe quelle classe, quelle que soit sa position dans la hiérarchie des classes.
  • Méthodes et champs statiques: Les classes abstraites peuvent avoir des champs et des méthodes statiques, auxquels il est possible d'accéder sans créer une instance de la classe.
abstract class Utility {
    static void printMessage() {
        System.out.println("Utility Message");
    }
}

Apprendre l'essentiel de Java

Développez vos compétences en Java à partir de la base et maîtrisez les concepts de programmation.
Commencez à apprendre gratuitement