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.
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.
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.
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.
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.
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 + "]"; } }
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 } }
Dans le code ci-dessus :
EmployeeParent est la classe abstraite qui définit la structure de ses sous-classes.
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.
ManagerChild étend EmployeeParent et fournit la logique spécifique de calcul du salaire net, y compris la prime de performance.
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.
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.
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 !
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!