logo

Héritage en Java

  1. Héritage
  2. Types d'héritage
  3. Pourquoi l'héritage multiple n'est-il pas possible en Java en cas de classe ?

Héritage en Java est un mécanisme dans lequel un objet acquiert toutes les propriétés et comportements d'un objet parent. C'est une partie importante de Oops (Système de programmation orienté objet).

L'idée derrière l'héritage en Java est que vous pouvez créer de nouveaux Des classes qui sont construits sur des classes existantes. Lorsque vous héritez d'une classe existante, vous pouvez réutiliser les méthodes et les champs de la classe parent. De plus, vous pouvez également ajouter de nouvelles méthodes et champs dans votre classe actuelle.

films

L'héritage représente le Relation IS-A qui est également connu sous le nom de parent-enfant relation.

Pourquoi utiliser l'héritage en Java

Termes utilisés en matière de succession

    Classe:Une classe est un groupe d'objets qui ont des propriétés communes. Il s'agit d'un modèle ou d'un plan à partir duquel les objets sont créés.Sous-classe/classe enfant :La sous-classe est une classe qui hérite de l'autre classe. On l’appelle également classe dérivée, classe étendue ou classe enfant.Super classe/classe parent :La superclasse est la classe dont une sous-classe hérite des fonctionnalités. On l'appelle également classe de base ou classe parent.Réutilisabilité :Comme son nom l'indique, la réutilisabilité est un mécanisme qui vous permet de réutiliser les champs et les méthodes de la classe existante lorsque vous créez une nouvelle classe. Vous pouvez utiliser les mêmes champs et méthodes déjà définis dans la classe précédente.

La syntaxe de l'héritage Java

 class Subclass-name extends Superclass-name { //methods and fields } 

Le étend le mot clé indique que vous créez une nouvelle classe dérivée d’une classe existante. La signification de « étend » est d’augmenter la fonctionnalité.

Dans la terminologie Java, une classe héritée est appelée parent ou superclasse, et la nouvelle classe est appelée enfant ou sous-classe.


Exemple d'héritage Java

Héritage en Java

Comme le montre la figure ci-dessus, Programmer est la sous-classe et Employee est la superclasse. La relation entre les deux classes est Programmeur IS-A Employé . Cela signifie que le programmeur est un type d'employé.

 class Employee{ float salary=40000; } class Programmer extends Employee{ int bonus=10000; public static void main(String args[]){ Programmer p=new Programmer(); System.out.println('Programmer salary is:'+p.salary); System.out.println('Bonus of Programmer is:'+p.bonus); } } 
Testez-le maintenant
 Programmer salary is:40000.0 Bonus of programmer is:10000 

Dans l'exemple ci-dessus, l'objet Programmer peut accéder au champ de sa propre classe ainsi qu'à celui de la classe Employee, c'est-à-dire la réutilisabilité du code.


Types d'héritage en Java

Sur la base de la classe, il peut y avoir trois types d'héritage en Java : simple, multiniveau et hiérarchique.

Dans la programmation Java, l'héritage multiple et hybride est pris en charge uniquement via l'interface. Nous découvrirons les interfaces plus tard.

Types d'héritage en Java

Remarque : L'héritage multiple n'est pas pris en charge en Java via la classe.

Lorsqu’une classe hérite de plusieurs classes, on parle d’héritage multiple. Par exemple:

Héritage multiple en Java

Exemple d'héritage unique

Lorsqu’une classe hérite d’une autre classe, on parle de héritage unique . Dans l'exemple donné ci-dessous, la classe Dog hérite de la classe Animal, il y a donc l'héritage unique.

Fichier : TestInheritance.java

 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class TestInheritance{ public static void main(String args[]){ Dog d=new Dog(); d.bark(); d.eat(); }} 

Sortir:

 barking... eating... 

Exemple d'héritage multiniveau

Lorsqu’il y a une chaîne d’héritage, on parle de héritage multiniveau . Comme vous pouvez le voir dans l'exemple ci-dessous, la classe BabyDog hérite de la classe Dog qui hérite à nouveau de la classe Animal, il existe donc un héritage à plusieurs niveaux.

Fichier : TestInheritance2.java

 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class BabyDog extends Dog{ void weep(){System.out.println('weeping...');} } class TestInheritance2{ public static void main(String args[]){ BabyDog d=new BabyDog(); d.weep(); d.bark(); d.eat(); }} 

Sortir:

 weeping... barking... eating... 

Exemple d'héritage hiérarchique

Lorsque deux classes ou plus héritent d’une seule classe, on parle de héritage hiérarchique . Dans l'exemple donné ci-dessous, les classes Dog et Cat héritent de la classe Animal, il existe donc un héritage hiérarchique.

Fichier : TestInheritance3.java

 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class Cat extends Animal{ void meow(){System.out.println('meowing...');} } class TestInheritance3{ public static void main(String args[]){ Cat c=new Cat(); c.meow(); c.eat(); //c.bark();//C.T.Error }} 

Sortir:

 meowing... eating... 

Q) Pourquoi l'héritage multiple n'est-il pas pris en charge en Java ?

Pour réduire la complexité et simplifier le langage, l'héritage multiple n'est pas pris en charge en Java.

Considérons un scénario dans lequel A, B et C sont trois classes. La classe C hérite des classes A et B. Si les classes A et B ont la même méthode et que vous l’appelez à partir d’un objet de classe enfant, il y aura une ambiguïté pour appeler la méthode de la classe A ou B.

Étant donné que les erreurs de compilation sont meilleures que les erreurs d’exécution, Java affiche une erreur de compilation si vous héritez de 2 classes. Donc, que vous ayez la même méthode ou une méthode différente, il y aura une erreur de compilation.

doubler en java
 class A{ void msg(){System.out.println('Hello');} } class B{ void msg(){System.out.println('Welcome');} } class C extends A,B{//suppose if it were public static void main(String args[]){ C obj=new C(); obj.msg();//Now which msg() method would be invoked? } } 
Testez-le maintenant
 Compile Time Error