Héritage en Java (avec exemple)

⚡ Résumé intelligent

Héritage en Java Il s'agit d'un mécanisme par lequel une classe acquiert les champs et les méthodes d'une autre classe grâce au mot-clé `extends`. Il favorise la réutilisation du code et modélise une relation « est un » entre une superclasse et ses sous-classes.

  • 🧬 Définition de l'héritage : Une classe acquiert les champs et les méthodes d'une autre en utilisant extends.
  • 👨👩👧 Est-ce une relation : Modélise une hiérarchie de classes parentes (super) et de classes enfants (sub).
  • 🇧🇷 Cinq types : Héritage simple, multiple, multiniveau, hiérarchique et hybride.
  • 🚫 Java Limitation: Java ne prend pas en charge l'héritage multiple ou hybride via les classes.
  • (I.e. Super mot-clé : Accède aux variables, méthodes et constructeurs de la classe parente depuis une sous-classe.
  • Avantage: Réutilise du code testé et ajoute des fonctionnalités via de nouvelles classes sans modifier les classes existantes.

Héritage en Java

Qu'est-ce que l'héritage ?

Droit des successions est un mécanisme dans lequel une classe acquiert la propriété d’une autre classe. Par exemple, un enfant hérite des traits de ses parents. Avec l'héritage, nous pouvons réutiliser les champs et les méthodes de la classe existante. Par conséquent, l’héritage facilite la réutilisabilité et constitue un concept important des POO.

Qu'est-ce que l'héritage en Java?

Java Droit des successions est un mécanisme dans lequel une classe acquiert la propriété d’une autre classe. Dans Java, lorsqu'une relation « Est-A » existe entre deux classes, nous utilisons l'héritage. La classe parent est appelée une super classe et la classe héritée est appelée une sous-classe. Le mot clé extends est utilisé par la sous-classe pour hériter des fonctionnalités de la super-classe. L'héritage est important car il conduit à la réutilisabilité du code.

Java Syntaxe d'héritage :

class subClass extends superClass
{
   //methods and fields
}

Types d'héritage en Java

Voici les différents types d'héritage en Java:

  1. Héritage unique
  2. Héritage multiple
  3. Héritage à plusieurs niveaux
  4. Héritage hiérarchique
  5. Héritage hybride

1. Héritage unique :

Dans l'héritage unique, une classe étend une autre classe (une seule classe).

Héritage unique en Java
Héritage unique

Dans le diagramme ci-dessus, la classe B étend uniquement la classe A. La classe A est une super classe et la classe B est une sous-classe.

2. Héritage multiple :

L'héritage multiple est l'un des héritages dans Java types où une classe s’étendant sur plus d’une classe. Java ne prend pas en charge l'héritage multiple.

Héritage multiple dans Java

Java Héritage multiple

Selon le diagramme ci-dessus, la classe C étend la classe A et la classe B.

3. Héritage à plusieurs niveaux :

Dans l'héritage multiniveau, une classe peut hériter d'une classe dérivée. La classe dérivée devient donc la classe de base de la nouvelle classe.

Héritage multiniveau dans Java

Héritage à plusieurs niveaux

Comme le montre le diagramme, la classe C est une sous-classe de B et B est une sous-classe de classe A.

4. Héritage hiérarchique :

Dans l'héritage hiérarchique, une classe est héritée par plusieurs sous-classes.


Héritage hiérarchique dans Java

Héritage hiérarchique

Selon l'exemple ci-dessus, les classes B, C et D héritent de la même classe A.

5. Héritage hybride :

L'héritage hybride est l'un des types d'héritage dans Java qui est une combinaison d’héritage simple et multiple.


Héritage hybride

Héritage hybride

Comme dans l'exemple ci-dessus, tous les membres publics et protégés de la classe A sont hérités de la classe D, d'abord via la classe B et ensuite via la classe C.

À noter: Java ne prend pas en charge l'héritage hybride/multiple

Héritage en Java Exemple

Voici un exemple d'héritage dans Java:


Exemple de Java Droit des successions

Java Exemple d'héritage

class Doctor {
 void Doctor_Details() {
  System.out.println("Doctor Details...");
 }
}

class Surgeon extends Doctor {
 void Surgeon_Details() {
  System.out.println("Surgen Detail...");
 }
}

public class Hospital {
 public static void main(String args[]) {
  Surgeon s = new Surgeon();
  s.Doctor_Details();
  s.Surgeon_Details();
 }
}

Super mot-clé

Le mot-clé super est similaire au mot-clé « this ». Le mot-clé super peut être utilisé pour accéder à n’importe quel membre de données ou à n’importe quelle méthode de la classe parent. Le mot-clé super peut être utilisé à variable, méthode et niveau constructeur.

syntaxe:

super.<method-name>();

Vérifiez également: - ce mot-clé dans Java: Qu'est-ce que c'est et comment l'utiliser avec l'exemple

Apprenez l'héritage dans la POO avec un exemple

Considérons la même application bancaire du exemple précédent.

Nous sommes censés ouvrir deux types de comptes différents, un pour épargner et un autre pour vérifier (également appelé courant).

Héritage en POO

Comparons et étudions comment nous pouvons aborder le codage à partir d'un perspective de programmation structurée et orientée objet.

Approche structurelle : En programmation structurée, nous allons créer deux fonctions –

  1. Un à retirer
  2. Et l'autre pour l'action de dépôt.

Puisque le fonctionnement de ces fonctions reste le même dans tous les comptes.

Héritage dans les POO

L'approche de la POO : En utilisant le Oops approche de programmation. Nous créerions deux classes.

  • Chacun ayant la mise en œuvre des fonctions de dépôt et de retrait.
  • Cela entraînera un travail supplémentaire redondant.

Héritage dans les POO

Demande de modification dans le logiciel

Il y a maintenant un changement dans la spécification des exigences pour quelque chose qui est si courant dans l’industrie du logiciel. Vous êtes censé ajouter une fonctionnalité de compte bancaire privilégié avec facilité de découvert. Pour mémoire, le découvert est une possibilité qui vous permet de retirer un montant supérieur au solde disponible de votre compte.

Demande de modification dans le logiciel

Approche structurelle : En utilisant une approche fonctionnelle, je dois modifier ma fonction de retrait, qui est déjà testée et référencée. Et ajouter une méthode comme ci-dessous prendra en charge les nouvelles exigences.

Demande de modification dans le logiciel

L'approche de la POO : En utilisant l'approche POO, il vous suffit d'écrire une nouvelle classe avec une implémentation unique de la fonction de retrait. Nous n'avons jamais touché au morceau de code testé.

Demande de modification dans le logiciel

Une autre demande de changement

Et si les exigences changeaient encore ? J'aime ajouter un compte de carte de crédit avec ses propres exigences de dépôt.

Demande de changement multiple dans les exigences logicielles

Approche structurelle : En utilisant une approche structurelle, vous devez à nouveau modifier la partie testée du code de dépôt.

Approche structurelle des demandes de changement multiples dans les logiciels

L'approche de la POO : En revanche, avec une approche orientée objet, il vous suffit de créer une nouvelle classe avec sa propre implémentation de la méthode de dépôt (surlignée en rouge dans l'image ci-dessous). Ainsi, même si la programmation structurée semble plus simple au premier abord, la POO s'avère plus performante sur le long terme.

L'approche de la POO face aux demandes de changement multiples

Avantages de l'héritage dans les POO

Mais on peut affirmer que dans toutes les classes, vous disposez de morceaux de code répétés.

Pour surmonter cela, vous créez une classe parent, disons « compte » et implémentez la même fonction de dépôt et de retrait. Et faites en sorte que les classes enfants héritent de la classe « compte ». Ainsi, elles auront accès aux fonctions de retrait et de dépôt dans la classe compte. Les fonctions ne doivent pas nécessairement être implémentées individuellement. Héritage en Java. .

Avantages de l'héritage dans les POO

Avantages de l'héritage dans les POO

FAQ

Java évite l'héritage multiple de classes pour prévenir le « problème du diamant », où le compilateur ne peut décider quelle méthode héritée utiliser. Java permet à une classe d'implémenter plusieurs interfaces pour atteindre une flexibilité similaire en toute sécurité.

Le mot-clé `this` fait référence à l'objet courant et à ses membres, tandis que `super` fait référence à la classe parente directe. Utilisez `super` pour appeler les variables, les méthodes ou le constructeur d'une classe parente depuis une sous-classe.

L'héritage modélise une relation « est un » où une sous-classe hérite d'une classe parente. La composition modélise une relation « possède un » où une classe contient d'autres objets. La composition est souvent plus flexible et est privilégiée pour les architectures faiblement couplées.

L'IA peut analyser les responsabilités des classes, suggérer des classes de base partagées, recommander les interfaces plutôt que l'héritage profond et signaler le code dupliqué.ping Les développeurs créent des hiérarchies propres et réutilisables qui suivent les principes de conception orientée objet.

Oui. L'analyse statique assistée par l'IA peut mesurer la profondeur d'héritage, signaler les hiérarchies fragiles ou excessivement imbriquées et suggérer une refactorisation vers la composition ou les interfaces afin d'améliorer la maintenabilité et de réduire le couplage fort.

Résumez cet article avec :