
L'héritage peut être défini comme le processus dans lequel un objet acquiert les propriétés d'un autre. Avec l'utilisation de l'héritage, l'information est rendue gérable dans un ordre hiérarchique.
Lorsque nous parlons d'héritage, le mot-clé le plus couramment utilisé serait extends et implements. Ces mots détermineraient si un objet IS-A est un autre type. En utilisant ces mots-clés, nous pouvons faire en sorte qu'un objet acquiert les propriétés d'un autre objet.
IS-A est une façon de dire: Cet objet est un type de cet objet. Voyons comment le mot clé extends est utilisé pour obtenir l'héritage.
public class Animal{
}
public class Mammal extends Animal{
}
public class Reptile extends Animal{
}
public class Dog extends Mammal{
}
Maintenant, en fonction de l'exemple ci-dessus, dans les termes orientés objet, ce qui suit est vrai:
Maintenant, si l'on considère la relation IS-A, on peut dire:
Avec l'utilisation du mot clé extends, les sous-classes pourront hériter toutes les propriétés de la superclasse, à l'exception des propriétés privées de la superclasse.
Nous pouvons assurer que Mammal est en fait un Animal avec l'utilisation de l'opérateur d'instance.
Exemple:
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);
}
}
Cela produirait le résultat suivant:
true
true
true
Puisque nous avons une bonne compréhension du mot clé extends, nous allons examiner comment le mot-clé implements est utilisé pour obtenir la relation IS-A.
Le mot-clé implements est utilisé par les classes par héritage des interfaces. Les interfaces ne peuvent jamais être heritées par les classes.
Exemple:
public interface Animal {}
public class Mammal implements Animal{
}
public class Dog extends Mammal{
}
Permettez-nous d'utiliser l’opérateur instanceof pour vérifier si mammifère est réellement un animal, et le chien est en réalité un animal
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);
}
}
Cela produirait le résultat suivant:
true
true
true
Cette relation repose principalement sur l'utilisation. Cela détermine si une certaine classe HAS-A certaine chose. Cette relation permet de réduire les doublons de code ainsi que les bugs.
Permettez- nous d'examiner un exemple:
public class Vehicule{}
public class Speed{}
public class Van extends Vehicule{
private Speed sp;
}
Cela montre que la classe Van HAS-A Speed. En ayant une classe distincte pour Speed, nous ne devons pas mettre le code entier qui appartient à la vitesse dans la classe Van. Cela permet de réutiliser la classe Speed ??dans plusieurs applications.
En fonction orientée objet, les utilisateurs n'ont pas besoin de se soucier de l'objet qui fait le véritable travail. Pour ce faire, la classe Van cache les détails d'implémentation des utilisateurs de la classe Van.Donc, fondamentalement, ce qui se passe, c'est que les utilisateurs demandent à la classe Van de faire une certaine action et la classe Van va soit faire le travail seul, soit demander à une autre classe d'effectuer l'action.
Un fait très important à retenir est que Java ne supporte qu'un seul héritage. Cela signifie qu'une classe ne peut pas étendre plus d'une classe. Par conséquent, la suite est illégale:
public class extends Animal, Mammal{}
Cependant, une classe peut implémenter une ou plusieurs interfaces. Cela a fait de se débarrasser de l'impossibilité d'un héritage multiple.