Héritage Java
Concept de l'héritage
L'héritage est une pierre angulaire de la technologie de programmation orientée objet Java, car il permet de créer des classes hiérarchiques.
L'héritage signifie qu'une sous-classe hérite des caractéristiques et des comportements d'une classe parente, de sorte que les objets (instances) de la sous-classe possèdent les champs et méthodes d'instance de la classe parente, ou que la sous-classe hérite des méthodes de la classe parente, donnant à la sous-classe les mêmes comportements que la classe parente.
L'héritage dans la vie quotidienne :

Les lapins et les moutons appartiennent à la classe des herbivores, tandis que les lions et les léopards appartiennent à la classe des carnivores.
Les herbivores et les carnivores appartiennent également à la classe des animaux.
Par conséquent, la relation que l’héritage doit satisfaire est : is-a. La classe parente est plus générale, et la sous-classe est plus spécifique.
Bien que les herbivores et les carnivores appartiennent tous deux aux animaux, il existe des différences dans leurs attributs et leurs comportements. Par conséquent, une sous-classe aura les caractéristiques générales de la classe parente ainsi que ses propres caractéristiques.
Format d’héritage de classe
En Java, vous pouvez utiliser le mot-clé extends pour déclarer qu’une classe hérite d’une autre classe. La forme générale est la suivante :
Format d’héritage de classe
Pourquoi avons-nous besoin de l’héritage ?
Ensuite, illustrons ce besoin avec un exemple.
Développez une classe d’animaux, où les animaux sont un pingouin et une souris, avec les exigences suivantes :
- Pingouin : attributs (name, id), méthodes (eat, sleep, self-introduction)
- Souris : attributs (name, id), méthodes (eat, sleep, self-introduction)
Classe Penguin :
Classe Mouse :
À partir de ces deux extraits de code, nous pouvons voir que le code est dupliqué, ce qui rend le code volumineux et gonflé, et la maintenabilité est faible (principalement parce que lorsque des modifications sont nécessaires plus tard, de nombreuses parties du code doivent être modifiées, ce qui est source d'erreurs). Pour résoudre fondamentalement le problème de ces deux extraits de code, l'héritage est nécessaire. Extrayez les parties communes des deux extraits de code pour former une classe parente :
Classe parente commune :
Cette classe Animal peut servir de classe parente. Après que les classes Penguin et Mouse héritent de cette classe, elles auront les attributs et les méthodes de la classe parente. Les sous-classes n'auront plus de code dupliqué, la maintenabilité est améliorée, le code est plus concis et la réutilisabilité du code est améliorée (la réutilisabilité signifie principalement qu'il peut être utilisé plusieurs fois sans réécrire le même code). Code après héritage :
Classe Penguin :
Classe Mouse :
Types d'héritage
Notez que Java ne prend pas en charge l'héritage multiple, mais il prend en charge l'héritage à plusieurs niveaux.

Caractéristiques de l'héritage
Une sous-classe possède tous les attributs et méthodes non privés de la classe parente.
Une sous-classe peut avoir ses propres attributs et méthodes, ce qui signifie qu'une sous-classe peut étendre la classe parente.
Une sous-classe peut implémenter les méthodes de la classe parente à sa manière.
L'héritage Java est un héritage simple, mais l'héritage à plusieurs niveaux est possible. L'héritage simple signifie qu'une sous-classe ne peut hériter que d'une seule classe parente. L'héritage à plusieurs niveaux signifie, par exemple, que la classe B hérite de la classe A, et que la classe C hérite de la classe B. Ainsi, en termes de relations, la classe B est la classe parente de la classe C, et la classe A est la classe parente de la classe B. C'est une caractéristique qui distingue l'héritage Java de l'héritage C++.
Cela augmente le couplage entre les classes (un inconvénient de l'héritage ; un couplage élevé rend les liens entre le code plus étroits et l'indépendance du code plus faible).
Mots-clés de l'héritage
L'héritage peut être implémenté à l'aide des deux mots-clés extends et implements. De plus, toutes les classes héritent de java.lang.Object. Lorsqu'une classe n'utilise pas ces deux mots-clés d'héritage, elle hérite d'Object par défaut (cette classe se trouve dans lejava.langpackage, donc il n'est pas nécessaire d'import) la classe ancêtre.
mot-clé extends
En Java, l’héritage de classe est un héritage simple ; c’est-à-dire qu’une sous-classe ne peut avoir qu’une seule classe parente, donc extends ne peut hériter que d’une seule classe.
mot-clé extends
mot-clé implements
L’utilisation du mot-clé implements peut indirectement donner à Java les caractéristiques de l’héritage multiple. Il est utilisé lorsqu’une classe hérite d’interfaces, et elle peut hériter de plusieurs interfaces en même temps (les interfaces sont séparées par des virgules).
mot-clé implements
mots-clés super et this
mot-clé super :Nous pouvons utiliser le mot-clé super pour accéder aux membres de la classe parente ; il est utilisé pour référencer la classe parente de l'objet courant.
mot-clé this :Une référence à lui-même, désignant l'objet courant, c'est-à-dire l'instance d'objet à laquelle appartient la méthode ou le constructeur en cours.
Exemple
Le résultat de sortie est:
animal : eat dog : eat animal : eat
mot-clé final
final peut être utilisé pour modifier des variables (y compris les attributs de classe, les attributs d'objet, les variables locales et les paramètres formels), des méthodes (y compris les méthodes de classe et les méthodes d'objet) et des classes.
final signifie « final ».
Utiliser le mot-clé final pour déclarer une classe définit la classe comme une classe finale qui ne peut pas être héritée ; ou il est utilisé pour modifier des méthodes, et ces méthodes ne peuvent pas être redéfinies par les sous-classes :
Déclarer une classe :
final class 类名 {//类体}-
Déclarer une méthode :
修饰符(public/private/default/protected) final 返回值类型 方法名(){//方法体}
Remarque :Dans une classe définie avec final, ses attributs et méthodes ne sont pas final.
Constructeur
Une sous-classe n'hérite pas du constructeur de la classe parente (méthode de construction ou fonction constructeur) ; elle ne fait que l'appeler (implicitement ou explicitement). Si le constructeur de la classe parente a des paramètres, alors dans le constructeur de la sous-classe vous devez explicitement utiliser lesupermot-clé pour appeler le constructeur de la classe parente avec une liste de paramètres appropriée.
Si le constructeur de la classe parente n'a pas de paramètres, alors dans le constructeur de la sous-classe il n'est pas nécessaire d'utiliser lesupermot-clé pour appeler le constructeur de la classe parente ; le système appellera automatiquement le constructeur sans argument de la classe parente.
Exemple
Le résultat de sortie est:
------SubClass 类继承------ SuperClass() SubClass() SuperClass(int n) SubClass(int n): 100 ------SubClass2 类继承------ SuperClass(int n) SubClass2() SuperClass() SubClass2(int n): 200Autres extensions