Héritage Java
L'héritage est une pierre angulaire de la technologie de programmation orientée objet Java car il permet la création de classes hiérarchiques. L'héritage peut être compris comme le processus par lequel un objet obtient les attributs d'un autre objet.
Si la classe A est la classe parent de la classe B, et la classe B est la classe parent de la classe C, on dit aussi que C est une sous-classe de A, et la classe C hérite de la classe A. En Java, l'héritage de classe est un héritage unique, c'est-à-dire qu'une sous-classe ne peut avoir qu'une seule classe parent
Les deux mots-clés les plus couramment utilisés en héritage sont extends et Implements.
L'utilisation de ces deux mots-clés détermine si un objet a une relation IS-A (est un) avec un autre objet.
En utilisant ces deux mots-clés, on peut parvenir à un objet pour obtenir les propriétés d'un autre objet.
Toutes les classes Java sont héritées de la classe java.lang.Object, donc Object est la classe ancêtre de toutes les classes, et à l'exception d'Object, toutes les classes doivent avoir une classe parent.
À l'aide du mot-clé extends, vous pouvez déclarer qu'une classe hérite d'une autre classe. La forme générale est la suivante :
// A.java public class A { private int i; protected int j; public void func() { } } // B.java public class B extends A { }
L'extrait de code ci-dessus montre que B est hérité de A. Est une sous-classe. de A. Et A est une sous-classe de Object, qui peut être déclarée ici sans déclaration explicite.
Relation IS-A
IS-A signifie : un objet est une classification d'un autre objet.
Ce qui suit est l'implémentation de l'héritage à l'aide du mot-clé extends.
public class Animal{ } public class Mammal extends Animal{ } public class Reptile extends Animal{ } public class Dog extends Mammal{ }
Sur la base de l'exemple ci-dessus, la déclaration suivante est correcte :
La classe Animal est la classe parent de la classe Mammifère.
La classe Animal est la classe parent de la classe Reptile.
La classe Mammifère et la classe Reptile sont des sous-classes de la classe Animal.
La classe Chien est une sous-classe de la classe Mammifère et de la classe Animal.
Analysez la relation IS-A dans l'exemple ci-dessus, comme suit :
Le mammifère est un animal
Le reptile est un animal
Le chien EST-Un mammifère
Donc : Le chien EST-Un animal
En utilisant le mot-clé extends, une sous-classe peut hériter de toutes les propriétés de la classe parent Méthodes et propriétés, mais les méthodes et propriétés privées ne peuvent pas être utilisées.
En utilisant l'opérateur instanceof, nous pouvons déterminer l'instance Mammal IS-A Animal
public class Dog extends Mammal{ public static void main(String args[]){ Animal a = new Animal(); Mammal m = new Mammal(); Dog d = new Dog(); System.out.println(m instanceof Animal); System.out.println(d instanceof Mammal); System.out.println(d instanceof Animal); } }
Les résultats de compilation et d'exécution de l'exemple ci-dessus sont les suivants :
true true true
Après avoir introduit le mot-clé extends, voyons comment le mot-clé implements est utilisé pour exprimer la relation IS-A.
Le mot-cléImplements est utilisé lorsqu'une classe hérite d'une interface. Le mot clé extends ne peut pas être utilisé dans ce cas.
Instance
public interface Animal {} public class Mammal implements Animal{ } public class Dog extends Mammal{ }
instanceof password
Vous pouvez utiliser l'opérateur instanceof pour vérifier si les objets Mammal et dog sont une instance du Classe d'animaux.
interface Animal{} class Mammal implements Animal{} public class Dog extends Mammal{ public static void main(String args[]){ Mammal m = new Mammal(); Dog d = new Dog(); System.out.println(m instanceof Animal); System.out.println(d instanceof Mammal); System.out.println(d instanceof Animal); } }
Les résultats de compilation et d'exécution de l'exemple ci-dessus sont les suivants :
true true true
Relation HAS-A
HAS-A représente la relation de dépendance entre une classe et ses membres. Cela facilite la réutilisation du code et réduit les erreurs de code.
Exemple
public class Vehicle{} public class Speed{} public class Van extends Vehicle{ private Speed sp; }
La classe Van et la classe Speed ont une relation HAS-A (Van a une Speed), il n'est donc pas nécessaire de coller tout le code de la Speed classe dans la classe Van, et la classe Speed Peut également être réutilisée pour plusieurs applications.
Dans les fonctionnalités orientées objet, les utilisateurs n'ont pas à se soucier de la façon dont la classe est implémentée en interne.
La classe Van cache les détails d'implémentation aux utilisateurs. Par conséquent, les utilisateurs ont seulement besoin de savoir comment appeler la classe Van pour exécuter une certaine fonction, et n'ont pas besoin de savoir si la classe Van le fait elle-même ou appelle. d'autres classes pour effectuer ces tâches.
Java ne prend en charge que l'héritage unique, c'est-à-dire qu'une classe ne peut pas hériter de plusieurs classes.
Les pratiques suivantes sont illégales :
public class extends Animal, Mammal{}
Java ne prend en charge que l'héritage unique (héritant des classes de base et des classes abstraites), mais nous pouvons utiliser des interfaces pour l'implémenter (plusieurs interfaces d'héritage à implémenter), Le La structure du script est la suivante :
public class Apple extends Fruit implements Fruit1, Fruit2{}
Généralement, nous utilisons le mot-clé extends pour hériter des classes de base et des classes abstraites, et utilisons le mot-clé Implements pour hériter des classes d'interface.