Héritage en Java (avec exemple)
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:
- Héritage unique
- Héritage multiple
- Héritage à plusieurs niveaux
- Héritage hiérarchique
- Héritage hybride
1. Héritage unique :
Dans l'héritage unique, une classe étend une autre classe (une seule classe).
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.
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.
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.
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.
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.
Remarque: Java ne prend pas en charge l'héritage hybride/multiple
Héritage en Java Exemple
Voici un exemple d'héritage dans Java:
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).
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 –
- Un à retirer
- Et l'autre pour l'action de dépôt.
Puisque le fonctionnement de ces fonctions reste le même dans tous les comptes.
L'approche de la POO: Lors de l'utilisation du 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.
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.
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.
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é.
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.
Approche structurelle : En utilisant une approche structurelle, vous devez à nouveau modifier la partie testée du code de dépôt.
L'approche de la POO:Mais en utilisant une approche orientée objet, vous allez simplement créer une nouvelle classe avec son implémentation unique de la méthode de dépôt (surlignée en rouge dans l'image ci-dessous). Ainsi, même si la programmation structurelle semble être une approche facile au départ, la programmation orientée objet l'emporte à long terme.
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. .