what is inheritance java tutorial with examples
Ce didacticiel explique le concept d’héritage en Java, des termes associés tels que les mots-clés «étend» et «super», la sous-classe, la superclasse, les relations Is-A, HAS-A, etc.:
Après avoir appris les trois piliers de la POO, à savoir l'abstraction, l'encapsulation et le polymorphisme en Java, nous arrivons au dernier pilier de la POO, à savoir l'héritage.
À partir de ce didacticiel, nous aborderons l'héritage en Java dans les deux prochains didacticiels.
=> Lisez la série de formations Easy Java.
Ce que vous apprendrez:
Héritage en Java
L'héritage en Java peut être défini comme une technique ou un processus dans lequel un objet d'une classe acquiert le comportement et les propriétés d'un autre objet. Cela se fait en héritant de la classe ou en établissant une relation entre deux classes.
Par exemple, une grenouille est un amphibien. Comme les autres animaux de la classe des amphibiens, Frog pourrait avoir de nombreuses caractéristiques communes à d'autres animaux. Donc, ici, un amphibien est une espèce et des animaux comme les grenouilles sont ses membres.
Si nous devons représenter l'espèce d'amphibiens et ses membres dans une représentation logicielle utilisant la POO, alors nous allons développer une classe «Amphibiens» contenant des propriétés ou des comportements communs aux amphibiens en général.
De cette façon, nous n'avons pas à reproduire les propriétés et le comportement communs de chaque animal amphibien que nous décrivons. Nous créerons directement une classe pour chacun des animaux amphibiens et hériterons de la classe des amphibiens comme indiqué ci-dessous.
Donc, une idée générale derrière la fonctionnalité «Héritage» est que nous pouvons créer de nouvelles classes en héritant des classes déjà existantes. En héritant des classes déjà existantes, nous pouvons utiliser les propriétés et le comportement de ces classes. De plus, nous pouvons ajouter plus de propriétés et / ou de comportement dans notre nouvelle classe.
La fonction d'héritage représente un ' parent-enfant ”Connexion ou relation en Java. La classe dont la nouvelle classe est héritée est appelée « Classe parent 'Tandis que la nouvelle classe est appelée' Classe enfant ».
L'héritage est principalement utilisé:
- Pour remplacement de méthode afin que nous puissions réaliser polymorphisme d'exécution .
- À réutiliser le code . En héritant des classes déjà existantes, nous assurons la réutilisabilité du code.
Terminologie courante utilisée dans l'héritage
- Réutilisabilité: Mécanisme par lequel les nouvelles classes réutilisent des champs ou des propriétés et des méthodes d'une classe existante.
- Classer: Une classe est une collection d'objets qui ont des propriétés communes. Une classe peut être considérée comme un modèle ou un modèle pour les objets.
- Sous-classe / classe enfant: Une classe qui hérite d'une autre classe est une sous-classe ou une classe enfant ou une classe dérivée.
- Super classe / classe parentale: Une classe héritée par une autre classe pour acquérir des propriétés et des méthodes est appelée une classe Parent ou une superclasse ou une classe de base.
La hiérarchie d'héritage suivante est un exemple montrant une superclasse et une sous-classe.
Nous avons une classe Employee avec les champs OrganisationName et EmployeeId. Il peut également avoir d'autres champs tels que le nom de l'employé, le service et d'autres détails de l'employé.
Ensuite, nous dérivons une autre classe nommée «SoftwareDeveloper» avec le salaire et les avantages du champ. La classe SoftwareDeveloper hérite de la classe Employee et par conséquent acquiert également les propriétés de la classe Employee.
Comme le montre le diagramme ci-dessus, la classe Employee est ici une classe Super ou Base et SoftwareDeveloper est une sous-classe ou une classe dérivée.
Mot clé 'étend' en Java
En Java, le mot-clé «extend» est utilisé pour hériter de la classe.
La syntaxe générale de l'héritage Java est donnée ci-dessous:
class SubClass extends SuperClass { //subclass methods and fields }
Comme indiqué ci-dessus, le mot-clé ‘extend’ apparaît après le nom de la classe dans la syntaxe de déclaration de classe.
Le mot clé «extend» indique que nous créons une nouvelle classe «SubClass» qui héritera des propriétés et du comportement de «SuperClass». En d'autres termes, le mot clé extend indique que nous construisons une nouvelle classe SubClass sur la fonctionnalité existante de la SuperClass.
L’héritage implémenté avec le mot-clé ‘extend’ est l’héritage de classe. Dans le prochain tutoriel, nous discuterons d'un autre mot-clé 'implements' à l'aide duquel nous pouvons hériter des interfaces.
Un exemple de la classe Employee-SoftwareDeveloper que nous avons expliqué ci-dessus peut être représenté par:
class Employee{ String OrganizationName; int EmployeeId; } class SoftwareDeveloper extends Employee{ float Salary; float Perks; }
Relation IS-A et HAS-A
Considérez la structure de classe suivante:
class Mammal{ } class Cow extends Mammal{ }
Alors, comment pouvons-nous interpréter la structure ci-dessus? Au fur et à mesure que la classe Vache s'étend ou hérite du mammifère, nous pouvons dire «Vache EST UN Mammifère »ou« Vache Est une sorte de Mammifère'. Par conséquent, chaque fois que nous exprimons de telles relations, cette relation particulière est la relation «IS_A».
Dans la structure ci-dessus, nous avons utilisé la hiérarchie d'héritage pour exprimer le fait qu'un type est d'un autre type. Donc, dans la structure ci-dessus, nous avons utilisé un héritage pour indiquer la relation entre la vache et le mammifère.
De même, nous pouvons exprimer d'autres relations IS-A comme suit:
Vous trouverez ci-dessus quelques exemples courants de relations que nous pouvons exprimer à l'aide de l'héritage en Java.
En général, le type de relations IS-A peut être exprimé en utilisant l'héritage.
Voyons maintenant l'exemple ci-dessous:
Dans le diagramme ci-dessus, nous voyons qu'un véhicule comporte deux parties, à savoir le moteur et le frein. Alors, comment pouvons-nous mettre ce scénario en mots?
On peut dire qu '«un véhicule contient un moteur et un véhicule contient un frein ».
Donc, ce que nous exprimons ici n'est pas la relation «IS-A» mais une relation de confinement dans laquelle nous spécifions un objet comme faisant partie d'un autre objet.
entretien de génie logiciel questions et réponses pdf
Dans l'exemple ci-dessus, un moteur est un partie de la véhicule. Ce n'est pas un ' en quelque sorte ”Véhicule. C'est le ' A UN »Ou relation de confinement ou de composition en Java. La relation Has-a en Java est exprimée en incluant un objet en tant que membre de la classe.
Donc, si nous suivons le même exemple de véhicule ci-dessus, nous pouvons l'exprimer comme ci-dessous:
class Engine{ } class Brake { } class Vehicle{ Engine e; Brake b; }
Ainsi, un véhicule a un moteur et un frein. En exprimant la relation de la manière ci-dessus, nous ne sommes pas intéressés par la mise en œuvre interne du moteur ou du frein. La classe de véhicule indiquera aux classes de moteur et de frein ce qui est nécessaire et ces classes le fourniront.
Comme la relation IS-A, la relation HAS-A est également utile pour réutiliser le code.
Dans ce tutoriel, nous aborderons l'héritage (IS-A) en détail et dans le prochain tutoriel, nous discuterons du confinement ou de la composition (HAS-A).
Exemple d'héritage Java
Implémentons un exemple simple en Java pour illustrer l'héritage.
//example class demonstrating Inheritance in Java class BaseClass { public void display() { System.out.println('BaseClass::Display'); } } //create a new class from BaseClass class DerivedClass extends BaseClass { public void print() { System.out.println('DerivedClass::print'); } } class Main { public static void main(String[] args) { //create an object of DerivedClass DerivedClass d1 = new DerivedClass(); d1.display(); //call BaseClass method d1.print(); //call DerivedClass method } }
Production:
Le programme ci-dessus montre un exemple simple d'héritage. Une BaseClass avec une méthode est déclarée. Ensuite, une autre classe DerivedClass qui étend BaseClass est déclarée. Cette classe a également une méthode.
Dans la méthode principale du programme, nous créons un objet DerivedClass et en utilisant cet objet, nous appelons la méthode BaseClass ainsi que la méthode DerivedClass.
La sortie affiche les messages imprimés par les deux méthodes. Comme DerivedClass étend la méthode BaseClass et BaseClass est publique, elle est visible par DerivedClass.
Mot clé 'super' en Java
Dans l'héritage, nous traitons des superclasses ou des classes parentes et des classes enfants. Si nous devons accéder de manière intermédiaire aux membres de la superclasse, y compris des variables, des méthodes ou des constructeurs, nous avons besoin d'un mécanisme. Ce mécanisme d'accès aux membres de la classe de base est fourni en Java à l'aide d'un mot-clé «super».
Alors dans quels scénarios utilisons-nous le mot-clé «super» en Java?
Vous trouverez ci-dessous des scénarios dans lesquels un mot-clé «super» peut être utile.
- Lorsque la classe super / base et la classe sous / dérivée ont les mêmes noms pour les membres, et que nous voulons accéder aux membres de la superclasse, nous utilisons le mot clé super.
- Lorsque nous voulons accéder au constructeur de la superclasse à partir de la sous-classe, nous utilisons le mot-clé super pour appeler le mot-clé de la superclasse.
Dans la figure ci-dessus, nous avons montré une structure d'héritage. Dans la classe de base ainsi que dans la classe dérivée, nous avons une variable String myStr. Dans la derivedClass, nous avons une fonction printStr (). Dans cette méthode, nous avons utilisé le mot-clé «super» pour accéder à la variable myStr à partir de la classe de base.
Dans la figure, nous avons montré les flèches pointant vers la variable membre de classe de base et la variable de classe dérivée.
Voyons maintenant les exemples de programmation d'utilisation du mot-clé super pour accéder à divers membres de la superclasse.
# 1) Accéder à la variable de membre Superclass
Le programme Java suivant illustre l’utilisation d’un mot clé «super» pour accéder aux variables de la classe de base.
class Baseclass { String myStr; } class Subclass extends Baseclass { String myStr; public void printdetails() //Baseclass and Subclass have variables with same name { super.myStr = 'Super'; //refers to parent class member myStr = 'Sub'; System.out.println('Superclass myStr :' + super.myStr+' and Subclass myStr:'+myStr); } } class Main{ public static void main(String[] args) { Subclass cobj = new Subclass(); cobj. printdetails (); } }
Production:
Le programme ci-dessus montre comment accéder aux variables membres de la classe de base à partir de la classe dérivée lorsque les variables membres sont déclarées avec le même nom à la fois dans la classe de base et dans la classe dérivée.
Ici, nous avons la variable myStr qui est déclarée dans la base ainsi que la classe dérivée. Dans la méthode printdetails, nous faisons référence à la variable myStr de la classe de base en utilisant «super.myStr» tandis que la variable de classe dérivée myStr est accessible directement sans aucun qualificatif.
# 2) Méthode d'accès Superclass
entreprises impliquées dans l'internet des objets
Ensuite, nous verrons comment appeler la méthode de la classe de base lorsque la méthode de la classe de base et la méthode de la classe dérivée ont les mêmes noms.
Le programme suivant le démontre.
class Parent { String myStr; public void print() //parent class method { myStr = 'Parent class myStr'; System.out.println(myStr); } } class Child extends Parent { String myStr; public void print() //child class method with same name as parent { super.print(); //call Parent class print() method myStr = 'Child class myStr'; System.out.println(myStr); } } class Main{ public static void main(String[] args) { Child c_obj = new Child(); c_obj.print (); } }
Production:
# 3) Accédez à Superclass Constructor
Lorsque nous héritons d'une classe d'une autre, notez que les constructeurs ne sont pas hérités.
Si nous voulons exécuter des instructions des constructeurs de la superclasse avant d'exécuter le constructeur de la classe dérivée, nous pouvons également appeler le constructeur de la superclasse en utilisant le mot-clé «super».
Pour appeler le constructeur de la superclasse, nous utilisons l'appel de méthode.
super (liste de paramètres…)
La méthode suivante montre l'accès aux super constructeurs en Java.
class Parent { String myStr; public Parent(String name) //base class constructor { myStr = name; } } class Child extends Parent { String myStr; public Child(String name1, String name2) { super(name1); //call base class constructor and pass argument value this.myStr = name2; } public void printDetails() //print details of both constructors { System.out.println('From base class constructor: ' +super.myStr); System.out.println('From derived class constructor: ' + myStr); } } class Main{ public static void main(String[] args) { Child cobj = new Child('Super constructor string','Child constructor string'); cobj.printDetails(); } }
Production:
Comme nous pouvons le voir dans le programme ci-dessus, nous avons appelé le constructeur de la superclasse à partir du constructeur de la classe dérivée. Notez que par convention, chaque fois que nous voulons accéder au constructeur de la superclasse, il doit s'agir de la première instruction du constructeur de la classe dérivée.
Comme la classe de base a un constructeur paramétré, nous passons également le paramètre approprié au super appel lors de l'appel du constructeur.
S'il n'y a pas d'appel explicite au super constructeur comme ci-dessus, le compilateur ajoute toujours automatiquement un appel implicite à super (). Mais notez que ce sera un appel au constructeur par défaut de la superclasse.
Questions fréquemment posées
Q # 1) Qu'est-ce que l'héritage en Java?
Répondre: Un processus par lequel une classe acquiert les propriétés et le comportement d'une autre classe est appelé héritage. En Java, une classe est héritée par une autre classe à l’aide du mot-clé ‘extend’.
L'héritage favorise la réutilisabilité du code car en héritant, nous pouvons acquérir et utiliser les propriétés et le comportement déjà existants d'une classe héritée sans avoir à écrire du code en double.
Q # 2) Pourquoi l'héritage est-il utilisé en Java?
Répondre: L'héritage est principalement utilisé pour améliorer la réutilisabilité de l'application. En utilisant l'héritage, nous pouvons utiliser des classes prêtes dans notre application. Nous n'avons pas à écrire notre code si nous avons la fonctionnalité prête.
La deuxième utilisation de l'héritage est la substitution de méthode. Pour implémenter le polymorphisme d'exécution, nous utilisons l'héritage.
Q # 3) Quels sont les avantages de l'héritage?
Répondre: La réutilisation est le principal avantage de l'héritage. Le partage de code par héritage se traduit également par une meilleure lisibilité et une meilleure organisation du code.
Nous pouvons également obtenir un polymorphisme à l'exécution via le remplacement de méthode à l'aide de l'héritage.
Q # 4) Quelles sont les caractéristiques de l'héritage?
Répondre: Toute caractéristique ou caractéristique acquise de l'ancienne génération se fait par héritage. Par exemple, le trait œil clair qui se produit dans de nombreuses familles est un exemple d'héritage.
Du point de vue de la programmation, l'héritage fournit la fonctionnalité de réutilisation et de remplacement de méthode.
Q # 5) Est-ce que super () est nécessaire?
Répondre: Non. Parce que si nous n’appelons pas super (), le compilateur le fait implicitement pour nous. Mais alors l'invocation implicite de super () est le constructeur de classe de base par défaut. Donc, si nous avons besoin d'un constructeur paramétré à partir d'une classe de base, nous devons l'appeler explicitement.
Conclusion
Dans ce didacticiel, nous avons présenté le concept d'héritage en Java. L'héritage est le processus d'acquisition des propriétés et du comportement d'une classe dans une autre classe. Nous avons discuté ici de la définition de base et de la terminologie que nous utilisons dans l'héritage.
Nous avons également discuté des relations Is-A et Has-A en Java. L'héritage est utilisé pour implémenter une relation Is-A.
Ensuite, nous avons discuté des mots-clés 'extend' et 'super' en Java qui sont utilisés dans le cadre de l'héritage. Extends est utilisé pour implémenter l'héritage. Le mot clé super est utilisé pour faire référence au constructeur de classe de base, à la méthode ou à la variable de la classe dérivée.
=> Consultez le guide de formation Perfect Java ici.
lecture recommandée
- Tutoriel de classe de scanner Java avec des exemples
- Qu'est-ce que le vecteur Java | Tutoriel de classe vectorielle Java avec des exemples
- Java Enum: Tutoriel sur l'énumération Java avec des exemples
- Méthode Java String length () avec exemples
- Tutoriel Java Float avec des exemples de programmation
- Héritage en C ++
- Types d'héritage en C ++
- Concepts de POO Python (classes, objets et héritage Python)