Maison > Java > javaDidacticiel > le corps du texte

Abstraction : décodage des classes abstraites en Java

Barbara Streisand
Libérer: 2024-10-30 08:09:03
original
925 Les gens l'ont consulté

Abstraction: Decoding Abstract Classes in Java

Dans cet article, nous explorons les Classes abstraites, une partie essentielle de l'abstraction en Java. Nous nous appuierons sur les concepts abordés précédemment et examinerons comment l'abstraction simplifie les systèmes complexes. Les classes abstraites servent de modèle pour d'autres classes, nous permettant de nous concentrer uniquement sur les détails pertinents tout en cachant la complexité inutile.

Approfondissons ce que sont les classes abstraites, pourquoi elles existent et comment elles sont utilisées.


Qu'est-ce qu'une classe abstraite ?

Une classe abstraite est une classe qui ne peut pas être instanciée seule. Il est conçu pour être étendu par des sous-classes qui fournissent des implémentations concrètes de ses méthodes abstraites. En d'autres termes, une classe abstraite jette les bases de ses sous-classes, permettant la réutilisation du code et le respect de la structure.

Principales caractéristiques des classes abstraites :

  • Défini à l'aide du mot-clé abstrait.

  • Peut contenir des méthodes abstraites (méthodes sans corps) qui doivent être implémentées par des sous-classes.

  • Peut également avoir des méthodes concrètes avec des implémentations complètes.

  • Peut déclarer des constructeurs, des champs et des méthodes non abstraites.

  • Ne peut pas être instancié directement.


Pourquoi des cours abstraits ?

Les classes abstraites permettent aux développeurs de masquer les détails d'implémentation inutiles à l'utilisateur tout en garantissant que certaines méthodes sont implémentées par toutes les sous-classes. Ils agissent comme des modèles à moitié définis et encouragent la réutilisation du code en fournissant des fonctionnalités partagées dans la classe de base.


Exemple : employé et gestionnaire

Pour démontrer le fonctionnement des classes abstraites, regardons l'exemple suivant impliquant une classe abstraite EmployeeParent et sa sous-classe ManagerChild. La classe parent détient des fonctionnalités partagées, tandis que la classe enfant termine l'implémentation avec des détails spécifiques tels que des bonus de performance.

EmployéParent.java

package oops.abstract_class;

public abstract class EmployeeParent {
    private int id, depId;
    private String name;
    private double basicSal;

    public EmployeeParent(int id, String name, int deptId, double basicSal) {
        this.id = id;
        this.depId = deptId;
        this.name = name;
        this.basicSal = basicSal;
    }

    // Abstract method to be implemented by subclasses.
    protected abstract double computeNetSalary();

    protected double getBasicSal() {
        return basicSal;
    }

    @Override
    public String toString() {
        return "EmployeeParent [id=" + id + ", depId=" + depId +
               ", name=" + name + ", basicSal=" + basicSal + "]";
    }
}
Copier après la connexion

ManagerChild.java

package oops.abstract_class;

public class ManagerChild extends EmployeeParent {
    private double perfBonus;

    public ManagerChild(int id, String name, int deptId, double basicSal, double perfBonus) {
        // Calling the constructor of the abstract class.
        super(id, name, deptId, basicSal);
        this.perfBonus = perfBonus;
    }

    // Implementing the abstract method from EmployeeParent.
    @Override
    public double computeNetSalary() {
        return getBasicSal() + perfBonus;
    }

    @Override
    public String toString() {
        return "ManagerChild [perfBonus=" + perfBonus + "\n" + super.toString() + "]";
    }

    public static void main(String[] args) {
        ManagerChild manager = new ManagerChild(1, "Arshi", 2, 10000, 1890);
        System.out.println(manager);
        System.out.println("Net Salary: " + manager.computeNetSalary());

        // Abstract class cannot be instantiated 
        EmployeeParent employee = new EmployeeParent(); // Compile Error
    }
}
Copier après la connexion

Décomposer l'exemple

Dans le code ci-dessus :

  1. EmployeeParent est la classe abstraite qui définit la structure de ses sous-classes.

  2. Il contient à la fois des méthodes concrètes (comme toString et getBasicSal) et une méthode abstraite (computeNetSalary), qui doit être implémentée par n'importe quelle sous-classe.

  3. ManagerChild étend EmployeeParent et fournit la logique spécifique de calcul du salaire net, y compris la prime de performance.

  4. Le constructeur de classe abstraite est invoqué via l'appel super() dans le constructeur de classe enfant, car la classe abstraite ne peut pas être instanciée directement.


Quand devriez-vous utiliser des classes abstraites ?

  • Réutilisabilité du code : Lorsque plusieurs classes partagent des champs et un comportement communs.

  • Enforce Structure : Lorsque vous souhaitez imposer l'implémentation de certaines méthodes dans les sous-classes.

  • Implémentation partielle :Quand une certaine logique peut être partagée entre les classes, alors que la logique spécifique varie.

  • Exemple de cas d'utilisation : Vous pouvez avoir une classe Shape abstraite avec des propriétés communes (comme la couleur) et des méthodes abstraites (comme getArea), que différentes formes (Circle, Rectangle) implémenteraient différemment.


Conclusion

Les classes abstraites jouent un rôle crucial en Java en offrant un équilibre entre abstraction complète et implémentation concrète. Ils permettent aux développeurs de se concentrer sur ce qui est nécessaire tout en cachant les détails complexes à l'utilisateur. Comprendre et utiliser efficacement les classes abstraites est une étape importante vers la maîtrise de la programmation orientée objet.

Restez à l'écoute pour le prochain article de la série, où nous explorerons les interfaces et en quoi elles diffèrent des classes abstraites !


Articles connexes

  • Principes fondamentaux de Java

  • Les essentiels de l'entretien avec Array

  • L'essentiel de la mémoire Java

  • L'essentiel des mots-clés Java

  • L'essentiel du cadre de collections

Bon codage !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal