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.


En tant que sous-classe, l'instance de B possède toutes les variables membres de A, mais n'a aucun droit d'accès à la variable membre privée B, qui assure l'encapsulation de A.



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.