logo

Java étend plusieurs classes

Java est un langage de programmation orienté objet qui permet aux développeurs de créer des systèmes logiciels complexes. L'une des fonctionnalités clés de Java est l'héritage, qui permet aux classes d'hériter des propriétés et des méthodes d'autres classes. En Java, une classe ne peut étendre qu'une seule classe parent à la fois, mais il est possible d'obtenir plusieurs comportements de type héritage en utilisant des interfaces. Dans cet article, nous explorerons comment étendre plusieurs classes en Java et fournirons des exemples de programmes avec sortie.

Extension de plusieurs classes en Java

Java ne permet pas à une classe d'étendre directement plusieurs classes. La raison en est d'éviter le problème du diamant, qui se produit lorsqu'une classe hérite de deux classes ayant une superclasse commune. Pour éviter ce problème, Java permet à une classe d'implémenter plusieurs interfaces, qui peuvent obtenir des fonctionnalités similaires.

Une interface est un ensemble de méthodes abstraites qui définissent le comportement d'une classe. Contrairement aux classes, les interfaces ne peuvent pas être instanciées, mais elles peuvent être implémentées par des classes. En implémentant une interface, une classe peut hériter des propriétés et des méthodes de plusieurs interfaces. Cela permet à une classe d'obtenir plusieurs comportements de type héritage, sans le problème du diamant. Pour étendre plusieurs classes en Java, nous devons créer une interface contenant les propriétés et les méthodes des classes parentes. La classe d'implémentation peut ensuite implémenter l'interface et hériter des propriétés et méthodes des classes parentes. Jetons un coup d'œil à un exemple pour mieux comprendre ce concept.

définir un ordinateur

Extension de plusieurs classes en Java

Dans cet exemple, nous allons créer trois classes : Animal, Mammifère et Reptile. Nous créerons ensuite une interface appelée Omnivore, qui étendra les classes Animal et Mammifère. Enfin, nous créerons une classe appelée Platypus, qui implémentera l'interface Omnivore.

La classe Animal contiendra une méthode appelée « manger » qui affiche « L'animal mange ». La classe Mammal étendra la classe Animal et contiendra une méthode appelée 'drinkMilk' qui imprime 'Mammal boit du lait'. La classe Reptile étendra également la classe Animal et contiendra une méthode appelée «layEggs» qui affiche «Le reptile pond des œufs».

Voici le code de la classe Animal :

 public class Animal { public void eat() { System.out.println('Animal is eating.'); } } 

Voici le code de la classe Mammifère :

 public class Mammal extends Animal { public void drinkMilk() { System.out.println('Mammal is drinking milk.'); } } 

Voici le code de la classe Reptile :

 public class Reptile extends Animal { public void layEggs() { System.out.println('Reptile is laying eggs.'); } } 

Créons maintenant l'interface Omnivore, qui étendra les classes Animal et Mammal :

souligner dans la démarque
 public interface Omnivore extends Animal, Mammal { public void eatPlants(); } 

Enfin, créons la classe Platypus, qui implémentera l'interface Omnivore :

 public class Platypus implements Omnivore { public void eat() { System.out.println('Platypus is eating.'); } public void drinkMilk() { System.out.println('Platypus is drinking milk.'); } public void eatPlants() { System.out.println('Platypus is eating plants.'); } } 

Dans cet exemple, la classe Platypus implémente l'interface Omnivore, qui étend les classes Animal et Mammal. Par conséquent, la classe Platypus hérite des propriétés et des méthodes des classes Animal et Mammifère.

Testons notre programme en créant une instance de la classe Platypus et en appelant ses méthodes :

 public class Main { public static void main(String[] args) { Platypus p = new Platypus(); p.eat(); p.drinkMilk(); p.eatPlants(); } } 

Sortir:

 Platypus is eating. Platypus is drinking milk. Platypus is eating plants. 

Comme nous pouvons le voir, la classe Platypus est capable d'hériter des propriétés et des méthodes des classes Animal et Mammal en implémentant l'interface Omnivore. Cela nous permet d'obtenir plusieurs comportements de type héritage en Java.

min max

Quand utiliser plusieurs comportements de type héritage en Java

Bien qu'il soit possible d'obtenir plusieurs comportements de type héritage en Java à l'aide d'interfaces, cela n'est pas toujours nécessaire ou souhaitable. En fait, de nombreux développeurs affirment que l’héritage multiple peut rendre le code plus complexe et plus difficile à maintenir. Par conséquent, il est important d’examiner attentivement si un comportement de type héritage multiple est nécessaire pour votre programme.

Une situation dans laquelle plusieurs comportements de type héritage peuvent être utiles est lorsque vous devez combiner des fonctionnalités provenant de plusieurs sources. Par exemple, si vous disposez de deux classes qui fournissent différents types de fonctionnalités, vous souhaiterez peut-être les combiner en une seule classe qui hérite des deux. Dans ce cas, implémenter une interface qui étend les deux classes peut être une bonne solution. Une autre situation dans laquelle un comportement de type héritage multiple peut être utile est lorsque vous travaillez avec des bibliothèques tierces qui utilisent largement l'héritage. Si vous devez étendre plusieurs classes tierces, l’implémentation d’interfaces peut être un bon moyen d’y parvenir sans créer de hiérarchies d’héritage complexes.

En Java, il n'est pas possible d'étendre directement plusieurs classes. Cependant, il est possible d'obtenir un comportement de type héritage multiple en implémentant des interfaces qui étendent plusieurs classes. Cela permet à une classe d'hériter des propriétés et des méthodes de plusieurs classes parentes, sans le problème Diamond qui peut survenir avec l'héritage multiple direct. Bien qu'un comportement de type héritage multiple puisse être utile dans certaines situations, il est important d'examiner attentivement s'il est nécessaire pour votre programme. Dans de nombreux cas, l’utilisation d’interfaces et de compositions peut constituer une meilleure solution pour combiner des fonctionnalités provenant de plusieurs sources.